Android自定義Drawable實(shí)現(xiàn)圓角效果
Drawable是一種可繪制資源的載體,如圖形、圖像等。在實(shí)際開(kāi)發(fā)中可以作為view的背景。主要有靜態(tài)和動(dòng)態(tài)兩種方式,靜態(tài)通過(guò)xml描述使用,動(dòng)態(tài)即自定義Drawable。本文實(shí)現(xiàn)一個(gè)圓形和圓角的背景圖片效果。
效果圖:
實(shí)現(xiàn)方式:
1.初始化一個(gè)BitmapShader著色器對(duì)象;
2.將著色器對(duì)象set給畫(huà)筆;
3.在畫(huà)布上繪制圓或圓角即可;
4.使用,view.setBackgroundDrawable
或者 ImageView.setImageDrawable
package com.mydrawable.musk; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.Shader; import android.graphics.drawable.Drawable; /** * Created by musk. */ public class CircleDrawable extends Drawable { private Paint mPaint; private int mWidth; private Bitmap mBitmap; public CircleDrawable(Bitmap bitmap) { mBitmap = bitmap; //著色器,設(shè)置橫向和縱向的著色模式為平鋪 BitmapShader bitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setDither(true); mPaint.setShader(bitmapShader); mWidth = Math.min(mBitmap.getWidth(), mBitmap.getHeight()); } //繪制 @Override public void draw(Canvas canvas) { canvas.drawCircle(mWidth / 2, mWidth / 2, mWidth / 2, mPaint); } //設(shè)置透明度值 @Override public void setAlpha(int alpha) { mPaint.setAlpha(alpha); } //設(shè)置顏色過(guò)濾器 @Override public void setColorFilter(ColorFilter colorFilter) { mPaint.setColorFilter(colorFilter); } //返回不透明度 @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } //返回圖片實(shí)際的寬高 @Override public int getIntrinsicWidth() { return mWidth; } @Override public int getIntrinsicHeight() { return mWidth; } }
自定義Drawable有五個(gè)方法必須覆寫(xiě),draw()、setAlpha()、setColorFilter()、getOpacity(),另外的getIntrinsicWidth()和getIntrinsicHeight()是在view設(shè)置wrap_content時(shí)設(shè)置drawable的寬度和高度。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android中一種巧妙的drawable.xml替代方案分享
- Android RippleDrawable 水波紋/漣漪效果的實(shí)現(xiàn)
- Android自定義Drawable之在Drawable中部指定透明區(qū)域方法示例
- 淺談Android中Drawable使用知識(shí)總結(jié)
- Android開(kāi)發(fā)基于Drawable實(shí)現(xiàn)圓角矩形的方法
- Android Bitmap和Drawable的對(duì)比
- Android Drawable和Bitmap的轉(zhuǎn)換實(shí)例詳解
- Android DrawableTextView圖片文字居中顯示實(shí)例
- Android Drawable必備知識(shí)小結(jié)
- Android drawable微技巧,你不知道的drawable細(xì)節(jié)
相關(guān)文章
android實(shí)現(xiàn)一鍵鎖屏和一鍵卸載的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于android如何實(shí)現(xiàn)一鍵鎖屏和一鍵卸載的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-05-05Android中程序的停止?fàn)顟B(tài)詳細(xì)介紹
這篇文章主要介紹了Android中程序的停止?fàn)顟B(tài)詳細(xì)介紹,本文講解了什么是程序的停止?fàn)顟B(tài)、為什么Android要引入這一狀態(tài)、激活狀態(tài)和停止?fàn)顟B(tài)的切換、如何變?yōu)橥V範(fàn)顟B(tài)等內(nèi)容,需要的朋友可以參考下2015-01-01Android開(kāi)發(fā)解決popupWindow重疊報(bào)錯(cuò)問(wèn)題
今天小編就為大家分享一篇關(guān)于Android開(kāi)發(fā)解決popupWindow重疊報(bào)錯(cuò)問(wèn)題的文章,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10Android RecyclerView的刷新分頁(yè)的實(shí)現(xiàn)
這篇文章主要介紹了Android RecyclerView的刷新分頁(yè)的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Android編程設(shè)計(jì)模式之抽象工廠模式詳解
這篇文章主要介紹了Android編程設(shè)計(jì)模式之抽象工廠模式,結(jié)合實(shí)例形式詳細(xì)分析了Android抽象工廠模式的概念、原理、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-12-12Android Compose Column列表不自動(dòng)刷新問(wèn)題
這篇文章主要介紹了Android Compose Column列表數(shù)據(jù)更新列表不刷新的問(wèn)題,總的來(lái)說(shuō)這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達(dá)的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過(guò)程。希望通過(guò)這道題能給你帶來(lái)一種解題優(yōu)化的思路2023-01-01Android Studio實(shí)現(xiàn)格式化XML代碼順序
這篇文章主要介紹了Android Studio實(shí)現(xiàn)格式化XML代碼順序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03Kotlin 協(xié)程 supervisorScope {} 運(yùn)行崩潰解決方法
看過(guò)很多?supervisorScope {}?文檔的使用,我照抄一摸一樣的代碼,運(yùn)行就崩潰,最后找到了解決方法,應(yīng)該是kotlin版本更新做過(guò)改動(dòng),當(dāng)前我使用的是?androidx.core:core-ktx:1.9.0,本文給大家介紹Kotlin 協(xié)程 supervisorScope {} 運(yùn)行崩潰解決方法,感興趣的朋友一起看看吧2024-01-01