package com.example.testprogreebar;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* @author writing
* @time 2019/8/5 12:37
* @note ${TODO}
*/
public class TestProgreebar extends SurfaceView implements SurfaceHolder.Callback {
private int viewWidth;
private int viewHeight;
private Paint paint1;
private Paint paint2;
private ScheduledExecutorService scheduledExecutorService;
private boolean stop = false;
private float progress;
private int speed = 1;
private SurfaceHolder holder;
private RectF r2;
public TestProgreebar(Context context) {
this(context, null);
}
public TestProgreebar(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public TestProgreebar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
inits();
}
private void inits() {
holder = this.getHolder();
holder.addCallback(this);
paint1 = new Paint();
paint1.setAntiAlias(true);
paint1.setColor(Color.GREEN);
paint2 = new Paint();
paint2.setAntiAlias(true);
paint2.setColor(Color.BLUE);
setZOrderOnTop(true);
getHolder().setFormat(PixelFormat.TRANSLUCENT);
setFocusable(true); // 設(shè)置焦點(diǎn)
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
viewWidth = MeasureSpec.getSize(widthMeasureSpec);
viewHeight = MeasureSpec.getSize(heightMeasureSpec);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
r2 = new RectF();
r2.left = 0;
r2.right = viewWidth;
r2.top = 0;
r2.bottom = viewHeight;
canvas.drawRoundRect(r2, 10, 10, paint2);
}
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
Log.i("zhang_xin", "創(chuàng)建");
stop = false;
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
scheduledExecutorService.scheduleAtFixedRate(new ScrollThread(), 1000,
10, TimeUnit.MILLISECONDS);
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
stop = true;
scheduledExecutorService.shutdown();
}
class ScrollThread implements Runnable {
@Override
public void run() {
while (!stop) {
draw(progress);
if(progress>viewWidth){
stop = true;
}
Log.i("zhang_xin", "繪制中" + (progress));
progress = progress + speed;
}
}
}
private synchronized void draw(float v) {
Canvas canvas = holder.lockCanvas();
r2.left = 0;
r2.right = v;
r2.top = 0;
r2.bottom = viewHeight;
canvas.drawRoundRect(r2, 10, 10, paint1);
holder.unlockCanvasAndPost(canvas);
}
}
SurfaceView實(shí)現(xiàn)進(jìn)度條
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- https://github.com/fems1888/SelfTestLib
- 一次水波進(jìn)度條的編程實(shí)現(xiàn)iOS 一、水波浪的效果,隨著進(jìn)度接近100%,水將慢慢的灌滿(mǎn)整個(gè)容器。效果圖如下: 獲取...
- WKWebView是iOS8 WebKit框架下控件,WKWebView 的estimatedProgress是當(dāng)...
- ——怕落后,來(lái)“1分鐘get技能”! 第2期的1分鐘,你將get的技能是:了解如何給自己的目標(biāo)設(shè)立進(jìn)度條。 你20...
- 1、神級(jí)進(jìn)度條整合2、Slider for Bootstrap3、基于Bootstrup的炫酷jQuery sli...