zoukankan      html  css  js  c++  java
  • 细节带来好的代码

    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。改到这一步,差点儿相同能够了。



  • 相关阅读:
    rac node1节点侦听地址为127.0.0.1问题
    rac crs节点故障(未解决)
    杂牌设备网络接入引起交换机引起端口翻转的故障
    Impdp导出前准备工作以及主要命令
    查询dba_tables视图tablespaces_name为空的问题
    Expdp导出前准备工作以及主要命令
    带参数的方法解析
    类的无参方法,注释
    类和对象的解析
    二重循环的解析
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/5067244.html
Copyright © 2011-2022 走看看