细节带来好的代码

1、什么是好的代码?

从工作角度上看,我认为就是能用的代码。适用的代码。通用的代码。

比方来说,一段的代码把功能实现了,这个是能用的代码。可是呢,代码可能中间还是有一些偏差,比方界面上数据显示非常粗糙,执行速度不够快。

所以写完能用的代码后,我们会再改动,改动,显示数据优化下,优化线程,优化内存管理。好的,再看一看,功能看起来还不错,心惬意足了,这个是适用的代码。某一天我们把这个程序搬到还有一个平台上面,哇哦,我们发现问题了,代码出现毛病了,怎么办,我们仅仅好打开源代码。再改动,改动,针对不兼容的部分做改动(html+js开发上尤为突出,android平台也会出现,可是有时候隐藏得比較深,须要专门的測试才干找得出来),最终这个程序在大部分平台上都能够执行了(为什么不是在全部的平台上都能执行。别扯了!

不太可能)。好的。这一段代码我们称之为通用的代码。

2、怎么写好的代码?

假设不从框架上去考虑(事实上我也想从框架上考虑,无奈码农级别,不敢扯那个东西)。单纯从功能实现上考虑,细节是最重要的。

上一段落,提到android不兼容的部分。有时候须要专门的測试才干找得出来,为什么这么说。细节,測试在检查功能的时候会比开发更注重细节。比方,做android平台上的某一即时通讯应用的时候,我们做的一个消息显示的板块,在大部分手机上測试都未出现故障,我们以为这个功能应该是没什么问题了。后来还是反馈出bug了,在魅族手机上出现故障。当内容太多且有分隔符时,消息显示所有为空格。所以细节非常重要。尽量想到别人想不到的地方。

3、细节能够锻炼么?

细节怎么锻炼么,个人认为能够(认为扯的。莫往下看)。

细节从何而来。天生是一部分。然后接着就是思维方式(这个须要多总结。每一个人都有自己的方式,写博客也是一种),另一种最笨的方式。也是最有效的方式。多做。

做多了,自然就细心了,一个错误,你能够连犯三次,可是第四次呢,第五次,假设你连犯十次的话,好吧,仅仅能说,你不仅仅软件不适合干,别的活预计也难。

4、简单演示样例

一个android的功能,绘制虚线。

在drawable下加入dotted_line.xml,代码为:

<?xml version="1.0" encoding="utf-8"?

> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" > <!--显示一条虚线,破折线的宽度为dashWith,破折线之间的空隙的宽度为dashGap,当dashGap=0dp时。为实线 --> <stroke android:dashGap="3dp" android:dashWidth="6dp" android:width="1dp" android:color="#63a219" /> <!-- 虚线的高度 --> <size android:height="1dp" /> </shape>


把LinearLayout的背景设置为设置为dotted_line.xml

 <!-- 虚线1 -->
   	<LinearLayout 
	    android:layout_width="fill_parent"
	    android:layout_height="2dp"
	    android:background="@drawable/dotted_line"
	    android:layout_marginLeft="10dp"
	    android:layout_marginRight="10dp"/>

这样就结束了么,我们拿起手机看一下,2.3系统下能够用。再看4.0下,都是一条条的实线。怎么解决呢,查看文档后,我们发现仅仅须要把AndroidManifest.xml中的application下加入android:hardwareAccelerated="false"就能够了。

好了。我们再执行看一下。嗯嗯,可以用了,可是android:hardwareAccelerated在android3.0之后才有支持。怎么办?自己写一个空间也许可以解决。

package com.anyfish.face.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PathEffect;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;

/**
 * @author LYH
 *
 */
public class DashedLine extends View {
    private final String namespace = "http://com.smartmap.driverbook";
    private float startX;
    private float startY;
    private float endX;
    private float endY;
    private Rect mRect;
  
    public DashedLine(Context context, AttributeSet attrs) {
        super(context, attrs);          
        
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);        
        Paint paint = new Paint();
        paint.setStyle(Paint.Style.STROKE);
        paint.setColor(Color.DKGRAY);
        Path path = new Path();     
        path.moveTo(0, 10);
        path.lineTo(480,10);      
        PathEffect effects = new DashPathEffect(new float[]{5,5,5,5},1);
        paint.setPathEffect(effects);
        canvas.drawPath(path, paint);
    }
}

在要绘制虚线的地方加入上这么一个控件

<com.anyfish.face.view.DashedLine
                                android:layout_width="fill_parent"
                                android:layout_height="10dip"
                                 />

再看一下,能否够了。嗯,是有效果了,可是换个屏幕分辨率比較大的手机再试试,还是出现故障了,虚线不够长!!!怎么办。再改改吧,改成屏幕自适应的。

package com.anyfish.face.view;

import com.anyfish.face.R;
import com.anyfish.util.utils.Utils;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PathEffect;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;

/**
 * @author LYH
 *
 */
public class DashedLine extends View {
	private float density;
	private Paint paint;
	private Path path;
	private PathEffect effects;

	public DashedLine(Context context)
	{
	    super(context);
	    init(context);
	}

	public DashedLine(Context context, AttributeSet attrs)
	{
	    super(context, attrs);
	    init(context);
	}

	public DashedLine(Context context, AttributeSet attrs, int defStyle)
	{
	    super(context, attrs, defStyle);
	    init(context);
	}

	private void init(Context context)
	{
	    density = Utils.getScreenDensity(context);
	    paint = new Paint();
	    paint.setStyle(Paint.Style.STROKE);
	    paint.setStrokeWidth(density * 4);
	    //set your own color
	    paint.setColor(context.getResources().getColor(R.color.text_diver));
	    path = new Path();
	    //array is ON and OFF distances in px (4px line then 2px space)
	    effects = new DashPathEffect(new float[] { 5, 5, 5, 5 }, 0);

	}

	@Override
	protected void onDraw(Canvas canvas)
	{
	    // TODO Auto-generated method stub
	    super.onDraw(canvas);
	    paint.setPathEffect(effects);
	    int measuredHeight = getMeasuredHeight();
	    int measuredWidth = getMeasuredWidth();
	    if (measuredHeight <= measuredWidth)
	    {
	        // horizontal
	        path.moveTo(0, 0);
	        path.lineTo(measuredWidth, 0);
	        canvas.drawPath(path, paint);
	    }
	    else
	    {
	        // vertical
	        path.moveTo(0, 0);
	        path.lineTo(0, measuredHeight);
	        canvas.drawPath(path, paint);
	    }
	}
}

ok。改到这一步,差点儿相同能够了。



posted @ 2015-12-22 17:03  hrhguanli  阅读(169)  评论(0编辑  收藏  举报