1. 程式人生 > >Android 自定義View例項之 “京東跑”

Android 自定義View例項之 “京東跑”

自定義View的相關文章:

先來看下效果:
這裡寫圖片描述

是不是有一種熟悉感,其實這種效果使用序列幀動畫也是可以實現的,這裡我們介紹下如何使用自定義View實現。
這是我們的素材,一張圖片上有5個京東小哥

這裡寫圖片描述

我們只需要不停的變換小哥就好了,原理明白了我們看下程式碼:

public class JDLoadingView extends View {

    private Bitmap bitmap;

    private int index = 0;

    private Paint paint;

    private long lastTime = 0;

    public JDLoadingView(Context context) {
        this(context,null);
    }

    public JDLoadingView(Context context, @Nullable AttributeSet attrs) {
        this
(context, attrs,0); } public JDLoadingView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { this(context, attrs, defStyleAttr,0); } public JDLoadingView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); bitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.jd); paint = new
Paint(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //第2個和第3個一樣的,作圖的時候重複了,所以拋棄第二個 if(index == 2){ index = 3; } //計算顯示第幾個小哥 int left = bitmap.getWidth()/5*index; int top =0; int right = bitmap.getWidth()/5*(index+1); int bottom = bitmap.getHeight(); //顯示一個京東小哥 canvas.drawBitmap(bitmap,new Rect(left,top,right,bottom),new Rect(0,0,getWidth(),getHeight()),paint ); index++; //顯示到最後一個,再次從頭開始顯示 if(index >=5){ index = 0; } //100ms以後重新整理 postInvalidateDelayed(100); } }

重點地方加上了註釋,只要原理明白了,實現還是很簡單的。