细节带来好的代码
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。改到这一步,差点儿相同能够了。