Android 自定義view實現(xiàn)進(jìn)度條加載效果實例代碼
這個其實很簡單,思路是這樣的,就是拿view的寬度,除以點的點的寬度+二個點 之間的間距,就可以算出大概能畫出幾個點出來,然后就通過canvas畫出點,再然后就是每隔多少時間把上面移動的點不斷的去改變它的坐標(biāo)就可以,
效果如下:

分析圖:

代碼如下:
package com.example.dotloadview;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.View;
/**
* Created by zhouguizhi on 6/18/15.
*/
public class DotLoadProgressView extends View {
private boolean isStart = false;
private int dotIndex =0;//點下面的角標(biāo)
private int dotNumber = 0;
private Paint mPaint;
private int paddingTop = 50;
private int paddingBottom = 50;
private int paddingLeft = 30;
private int paddingRight = 30;
private Handler mHandler = new Handler();
private long DELAY_TIME = 300;
private Bitmap bitmap;
private int itemDotSpace = 10;//二個點之間的距離
private Bitmap moveBitmap ;
private Runnable mRunnable = new Runnable() {
@Override
public void run() {
if (dotNumber != 0){
dotIndex = (dotIndex + 1) % dotNumber;
}
invalidate();
mHandler.postDelayed(mRunnable, DELAY_TIME);
}
};
public DotLoadProgressView(Context context, AttributeSet attrs) {
super(context, attrs);
moveBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.active_dot);
init();
}
private void init() {
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setStyle(Paint.Style.FILL);
mPaint.setDither(true);
mPaint.setAntiAlias(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
for(int i=0;i<dotNumber;i++){
canvas.drawBitmap(bitmap,paddingLeft+i*itemDotSpace+bitmap.getWidth()*i,paddingTop,mPaint);
}
if(isStart){
canvas.drawBitmap(moveBitmap,paddingLeft+dotIndex*itemDotSpace+moveBitmap.getWidth()*dotIndex,paddingTop,mPaint);
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.inactive_dot);
setMeasuredDimension(parentWidth,bitmap.getHeight()+paddingTop+paddingBottom);
int widthWithoutPadding = parentWidth - paddingLeft - paddingRight;
dotNumber = calculateDotsNumber(widthWithoutPadding);
}
private int calculateDotsNumber(int width) {
int number = (width / (itemDotSpace + bitmap.getWidth()));
return number;
}
public void startProgress() {
isStart = true;
dotIndex = -1;
mHandler.removeCallbacks(mRunnable);
mHandler.post(mRunnable);
}
public void stopProgress() {
isStart = false;
mHandler.removeCallbacks(mRunnable);
invalidate();
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
startProgress();
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
stopProgress();
}
}
布局代碼:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.example.dotloadview.DotLoadProgressView
android:id="@+id/progress1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</RelativeLayout>
二個點其實是圖片,在網(wǎng)上別人項目中拿出來用的,如果感覺那個點圖片大了的話,有二個辦法,第一叫你們美工切小點,第二就是通過drawable.setBound()去限制他大小了,我在這其實是偷懶,沒有那么做,當(dāng)然這點你也可以通過shade去做,而不用圖片的話
最終的效果圖還是這樣的:

總結(jié)
以上所述是小編給大家介紹的Android 自定義view實現(xiàn)進(jìn)度條加載效果實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- Android自定義帶加載動畫效果的環(huán)狀進(jìn)度條
- Android開發(fā)之ProgressBar字體隨著進(jìn)度條的加載而滾動
- Android自定義View仿華為圓形加載進(jìn)度條
- Android中WebView加載網(wǎng)頁設(shè)置進(jìn)度條
- Android Material加載進(jìn)度條制作代碼
- Android自定義View基礎(chǔ)開發(fā)之圖片加載進(jìn)度條
- Android Webview添加網(wǎng)頁加載進(jìn)度條實例詳解
- Android中實現(xiàn)Webview頂部帶進(jìn)度條的方法
- Android WebView線性進(jìn)度條實例詳解
- Android自定義帶進(jìn)度條WebView仿微信加載過程
相關(guān)文章
Android ScrollView實現(xiàn)向上滑動控件頂部懸浮效果
這篇文章主要為大家詳細(xì)介紹了Android ScrollView實現(xiàn)向上滑動控件頂部懸浮效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05
Android網(wǎng)絡(luò)通信的實現(xiàn)方式
這篇文章主要為大家詳細(xì)介紹了Android網(wǎng)絡(luò)通信的實現(xiàn)方式,四種實現(xiàn)網(wǎng)絡(luò)通信的方式供大家學(xué)習(xí),感興趣的小伙伴們可以參考一下2016-06-06
Android?Studio實現(xiàn)簡易計算器設(shè)計
這篇文章主要為大家詳細(xì)介紹了Android?Studio實現(xiàn)簡易計算器設(shè)計,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05
淺析Android系統(tǒng)的架構(gòu)以及程序項目的目錄結(jié)構(gòu)
這篇文章主要介紹了Android系統(tǒng)的架構(gòu)以及程序項目的目錄結(jié)構(gòu),是安卓開發(fā)入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-04-04

