帶加載狀態(tài)的SeekBar

一個(gè)神奇的美工給我設(shè)計(jì)了一個(gè)seekbar的thumb上面帶加載狀態(tài)的效果....
簡直想哭
沒辦法,自定義控件吧

package com.example.mayn.myapplication;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Handler;
import android.util.AttributeSet;
import android.widget.SeekBar;

/**
 * Create by GongPeng
 * use for:帶加載的seekbar
 */
@SuppressLint("AppCompatCustomView")
public class MusicLoadingSeekBar extends SeekBar {

    private int loadingPosition;
    private Bitmap loadingBitmap;
    //
    private Point mDiscPoint = new Point();
    private Matrix matrix = new Matrix();
    // 旋轉(zhuǎn)中心坐標(biāo)
    private Point mDiscCenterPoint = new Point();
    private float mDiscRotation = 0.0f;

    //定義、并創(chuàng)建畫筆
    private Paint paint = new Paint();
    //是否加載狀態(tài)
    private boolean isLoading = false;

    public MusicLoadingSeekBar(Context context) {
        super(context);
        init();
    }

    public MusicLoadingSeekBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MusicLoadingSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        loadingBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.yp_bfq_jz);
        loadingBitmap = Bitmap.createScaledBitmap(loadingBitmap, 40, 40, true);
    }

    public void setLoading(boolean loading) {
        isLoading = loading;
        invalidate();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        if (isLoading) {

            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
                Rect thumbRect = getThumb().getBounds();
                loadingPosition = thumbRect.centerX();
            }else {
                Rect rect = getProgressDrawable().getBounds();
                loadingPosition = rect.width() * getProgress() / getMax();
            }

            int height = getHeight();
            // 抗鋸齒
            paint.setAntiAlias(true);
            //設(shè)置畫筆的顏色
            paint.setColor(Color.parseColor("#0099ff"));
            //設(shè)置填滿
            paint.setStyle(Paint.Style.FILL);
            //設(shè)置畫筆寬度
            paint.setStrokeWidth(15);
            // 計(jì)算X坐標(biāo)
            float xPos = loadingPosition;
            // 計(jì)算Y坐標(biāo)
            float yPos = height / 2;
            mDiscPoint.x = (int) (xPos - 20);
            mDiscPoint.y = (int) (yPos - 20);
            mDiscCenterPoint.x = loadingPosition;
            mDiscCenterPoint.y = height / 2;
            //繪制一個(gè)點(diǎn)
            canvas.drawCircle(xPos, yPos, 20, paint);
            matrix.setRotate(mDiscRotation, mDiscCenterPoint.x, mDiscCenterPoint.y);
            matrix.preTranslate(mDiscPoint.x, mDiscPoint.y);
            canvas.drawBitmap(loadingBitmap, matrix, null);
            mHandler.postDelayed(mRotationRunnable, 500);
        }
    }

    private Handler mHandler = new Handler();


    private Runnable mRotationRunnable = new Runnable() {
        @Override
        public void run() {
            mDiscRotation += 2.0f;
            if (mDiscRotation >= 360) {
                mDiscRotation = 0;
            }
            invalidate();
            mHandler.postDelayed(this, 500);
        }
    };

}

不行啊---怎么還有一個(gè)系統(tǒng)自帶的thumb效果礙事?
弄個(gè)style去一下

<!-- 播放器SeekBar控件 -->
   <style name="musicSeekBar" parent="android:Widget.SeekBar">
       <item name="android:indeterminate">false</item>
       <item name="android:progressDrawable">@drawable/player_seekbar_bg</item>
       <item name="android:minHeight">2dip</item>
       <item name="android:maxHeight">2dip</item>
       <item name="android:paddingLeft">0dp</item>
       <item name="android:paddingRight">0dp</item>
       <item name="android:thumb">@drawable/music_rotate_thumb</item>
       <item name="android:thumbOffset">0dip</item>
       <item name="android:focusable">true</item>
   </style>
   

最后,看一下效果:


Screenshot_20180920-170449.jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容