溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android SeekBar如何自定義thumb旋轉動畫效果

發(fā)布時間:2021-11-19 10:09:10 來源:億速云 閱讀:153 作者:小新 欄目:開發(fā)技術

這篇文章給大家分享的是有關Android SeekBar如何自定義thumb旋轉動畫效果的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

    示例

    dimens.xml

    為方便管理,可以添加一些尺寸設置

    <dimen name="audio_course_item_seek_bar_progress_height">6dp</dimen>
    <dimen name="audio_course_item_seek_bar_radius">2dp</dimen>
    <dimen name="audio_seek_bar_thumb_size">20dp</dimen>
    <dimen name="audio_seek_bar_thumb_ring_width">4dp</dimen>

    drawable

    我們一共要添加4個drawable文件。分別是2種thumb,1個動畫,1個進度條“底座”。

    shape_thumb_round_1.xml # 靜態(tài)thumb
    layers_seek_bar_progress_1.xml
    layers_thumb_ring_sweep_1.xml
    rotate_thumb_1.xml
    shape_thumb_round_1.xml

    用solid和stroke做出的圓環(huán)效果

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval">
        <solid android:color="#ffffff" />
        <stroke
            android:width="@dimen/audio_seek_bar_thumb_ring_width"
            android:color="#7095fc" />
        <size
            android:width="@dimen/audio_seek_bar_thumb_size"
            android:height="@dimen/audio_seek_bar_thumb_size" />
    </shape>
    layers_thumb_ring_sweep_1.xml

    這是準備拿來轉圈的thumb。使用layer-list,疊加多層效果。
    底部是一個半白色的圓(android:shape="oval")。
    再疊加上一層圓環(huán)(android:shape="ring"),使用了漸變色,增加動感。

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="oval">
                <size
                    android:width="@dimen/audio_seek_bar_thumb_size"
                    android:height="@dimen/audio_seek_bar_thumb_size" />
                <solid android:color="#ffffff" />
            </shape>
        </item>
        <item>
            <shape
                android:innerRadius="4dp"
                android:thicknessRatio="6"
                android:shape="ring"
                android:useLevel="false">
                <gradient
                    android:endColor="#ffffff"
                    android:startColor="#7095fc"
                    android:type="sweep" />
                <size
                    android:width="@dimen/audio_seek_bar_thumb_size"
                    android:height="@dimen/audio_seek_bar_thumb_size" />
            </shape>
        </item>
    </layer-list>
    rotate_thumb_1.xml

    定義旋轉效果。注意它的drawable使用了上面定義的layers_thumb_ring_sweep_1.xml。

    <?xml version="1.0" encoding="utf-8"?>
    <rotate xmlns:android="http://schemas.android.com/apk/res/android"
        android:drawable="@drawable/layers_thumb_ring_sweep_1"
        android:duration="100"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="-360" />

    旋轉參數(shù)android:toDegrees可以根據(jù)需求定義。

    layers_seek_bar_progress_1.xml

    定義進度條的樣式。這個是“底座”。顏色要和上面的匹配,看起來好看一點。

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:id="@android:id/background">
            <shape>
                <size
                    android:width="5dp"
                    android:height="@dimen/audio_course_item_seek_bar_progress_height" />
                <solid android:color="#e1e5e8" />
            </shape>
        </item>
        <item android:id="@android:id/secondaryProgress">
            <clip>
                <shape>
                    <solid android:color="#b7bdc8" />
                </shape>
            </clip>
        </item>
        <item android:id="@android:id/progress">
            <clip>
                <shape>
                    <gradient
                        android:angle="0"
                        android:centerColor="#b8cafd"
                        android:endColor="#86a4fd"
                        android:startColor="#eef2ff" />
                </shape>
            </clip>
        </item>
    </layer-list>

    layout

    上面的資源文件準備完畢后。在我們的布局中添加一個SeekBar

    • android:maxHeightandroid:minHeight需要設置

    • android:progressDrawable 用前面定義好的“底座”

    • android:thumb 先使用靜態(tài)的樣式

    <SeekBar
        android:id="@+id/play_sb"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:background="@null"
        android:maxHeight="@dimen/audio_course_item_seek_bar_progress_height"
        android:minHeight="@dimen/audio_course_item_seek_bar_progress_height"
        android:progress="40"
        android:progressDrawable="@drawable/layers_seek_bar_progress_1"
        android:thumb="@drawable/shape_thumb_round_1"
        app:layout_constraintTop_toTopOf="parent" />

    Activity中調用

    由Activity來持有Drawable變量和動畫。例子中使用了dataBinding。

    private RotateDrawable mRotateThumbDrawable; //  加載中的thumb,由Activity來持有這個drawable
    private Drawable mSolidThumb;
    private ObjectAnimator mThumbAnimator; // 控制動畫
    // ...
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mBinding = DataBindingUtil.setContentView(this, R.layout.act_seekbar_1);// ...
            mRotateThumbDrawable = (RotateDrawable) AppCompatResources.getDrawable(getApplicationContext(), R.drawable.rotate_thumb_1);
            mSolidThumb = AppCompatResources.getDrawable(getApplicationContext(), R.drawable.shape_thumb_round_1);
        }

    Drawable對象由activity直接持有,操作起來比較方便。

    改變seekbar的thumb,使用方法setThumb(Drawable thumb)

    使用靜態(tài)的thumb

    mBinding.playSb.setThumb(mSolidThumb);

    使用轉圈圈的效果,先setThumb,并且需要啟動動畫

    mBinding.playSb.setThumb(mRotateThumbDrawable);
    mThumbAnimator = ObjectAnimator.ofInt(mRotateThumbDrawable, "level", 0, 10000);
    mThumbAnimator.setDuration(1000);
    mThumbAnimator.setRepeatCount(ValueAnimator.INFINITE);
    mThumbAnimator.setInterpolator(new LinearInterpolator());
    mThumbAnimator.start();

    效果如下圖

    Android SeekBar如何自定義thumb旋轉動畫效果

    可以在靜態(tài)和動態(tài)之間相互切換。

    離開頁面時記得關閉動畫

    @Override
    protected void onDestroy() {
        if (null != mThumbAnimator) {
            mThumbAnimator.cancel();
        }
        super.onDestroy();
    }

    感謝各位的閱讀!關于“Android SeekBar如何自定義thumb旋轉動畫效果”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

    AI