Android 自定義View例項之 “京東跑”
阿新 • • 發佈:2018-11-27
自定義View的相關文章:
- Android 實現一個簡單的自定義View
- Android 自定義View步驟
- Android Paint詳解
- Android 自定義View之Canvas相關方法說明
- Android 自定義View例項之 “京東跑”
- Android 自定義View例項之進度圓環
- Android 原始碼分析(TextView)
- Android 自定義View分發流程
- Android 自定義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);
}
}
重點地方加上了註釋,只要原理明白了,實現還是很簡單的。