日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
android自定義button

自定義CompoundButton是一種非常實(shí)用的功能,可以讓開發(fā)者為Android應(yīng)用提供更加豐富的界面和交互體驗(yàn),在自定義CompoundButton時(shí),我們通常會為其添加各種效果,如漣漪效果、點(diǎn)擊效果等,本文將介紹如何為Android自定義CompoundButton添加漣漪效果。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、左云網(wǎng)站維護(hù)、網(wǎng)站推廣。

實(shí)現(xiàn)原理

漣漪效果的實(shí)現(xiàn)原理是利用遮罩層來模擬水波擴(kuò)散的過程,我們需要創(chuàng)建一個(gè)圓形的遮罩層,然后通過重繪的方式,讓遮罩層在CompoundButton被點(diǎn)擊時(shí)產(chǎn)生動畫效果,具體步驟如下:

1、創(chuàng)建一個(gè)圓形遮罩層;

2、為CompoundButton設(shè)置點(diǎn)擊事件監(jiān)聽器;

3、在點(diǎn)擊事件中,獲取CompoundButton的位置信息;

4、根據(jù)位置信息,計(jì)算出需要繪制的圓形區(qū)域;

5、重繪遮罩層,生成漣漪效果。

實(shí)現(xiàn)代碼

下面我們來看一下具體的實(shí)現(xiàn)代碼:

public class RippleEffectButton extends CompoundButton {
    private static final int MAX_RADIUS = 100; // 漣漪最大半徑
    private static final int MIN_RADIUS = 30; // 漣漪最小半徑
    private static final int ANIMATION_DURATION = 100; // 動畫持續(xù)時(shí)間(毫秒)
    private Paint mPaint; // 畫筆
    private Path mPath; // 路徑
    private boolean mIsPressed; // 是否按下
    public RippleEffectButton(Context context) {
        super(context);
        init();
    }
    public RippleEffectButton(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }
    public RippleEffectButton(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }
    private void init() {
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaint.setStyle(Paint.Style.FILL);
        mPaint.setColor(Color.BLUE); // 可以設(shè)置為其他顏色
        mPaint.setStrokeWidth(10); // 可以設(shè)置為其他寬度
        mPaint.setAlpha(255); // 不透明度,范圍0-255,可以設(shè)置為其他值
        mPaint.setStrokeCap(Paint.Cap.ROUND); // 線帽樣式,這里設(shè)置為圓角線帽
        mPaint.setStrokeJoin(Paint.Join.ROUND); // 線段連接樣式,這里設(shè)置為圓角連接點(diǎn)
        mPath = new Path(); // 初始化路徑對象
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (!mIsPressed) return; // 如果沒有按下按鈕,直接返回不繪制漣漪效果
        float radius = MAX_RADIUS * getWidth() * (MAX_RADIUS + MIN_RADIUS) * Math.abs(getTranslationX()) * Math.abs(getTranslationY()) * (Math.abs(getTranslationX()) + Math.abs(getTranslationY())); // 根據(jù)位置計(jì)算半徑大小
        int diameter = (int) (radius * Math.sqrt(2)); // 將半徑轉(zhuǎn)換為直徑,用于設(shè)置圓角矩形的寬高比
        int paddingLeft = getPaddingLeft() > diameter ? getPaddingLeft() : diameter; // 確保圓角矩形的左上角在按鈕內(nèi)部,避免超出按鈕邊界
        int paddingTop = getPaddingTop() > diameter ? getPaddingTop() : diameter; // 確保圓角矩形的左上角在按鈕內(nèi)部,避免超出按鈕邊界
        int paddingRight = getPaddingRight() < diameter + paddingLeft ? getPaddingRight() + paddingLeft + diameter: diameter + paddingLeft; // 確保圓角矩形的右下角在按鈕內(nèi)部,避免超出按鈕邊界
        int paddingBottom = getPaddingBottom() < diameter + paddingTop? getPaddingBottom() + paddingTop + diameter: diameter + paddingTop; // 確保圓角矩形的右下角在按鈕內(nèi)部,避免超出按鈕邊界
        RectF rectF = new RectF(paddingLeft, paddingTop, paddingRight, paddingBottom); // 根據(jù)內(nèi)邊距計(jì)算圓角矩形的位置和大小
        mPath.reset(); // 重置路徑對象
        mPath.addRoundRect(rectF, MAX_RADIUS * getWidth(), MAX_RADIUS * getHeight(), PathMeasure.MeasureMode.EXACTLY); // 根據(jù)圓角矩形的位置和大小添加圓角矩形路徑
        canvas.drawPath(mPath, mPaint); // 根據(jù)路徑繪制漣漪效果
    }
}

總結(jié)與展望

通過上述代碼,我們成功地實(shí)現(xiàn)了一個(gè)自定義的CompoundButton,并為其添加了漣漪效果,這種效果不僅美觀,而且可以提高用戶的操作體驗(yàn),當(dāng)然,還有很多優(yōu)化的空間,例如可以根據(jù)不同的設(shè)備和系統(tǒng)版本調(diào)整漣漪效果的表現(xiàn)形式,希望本文能對您有所幫助。
文章標(biāo)題:android自定義button
標(biāo)題鏈接:http://www.dlmjj.cn/article/dhojccj.html