Android自定義Drawable實現(xiàn)圓角效果
Drawable是一種可繪制資源的載體,如圖形、圖像等。在實際開發(fā)中可以作為view的背景。主要有靜態(tài)和動態(tài)兩種方式,靜態(tài)通過xml描述使用,動態(tài)即自定義Drawable。本文實現(xiàn)一個圓形和圓角的背景圖片效果。
效果圖:
實現(xiàn)方式:
1.初始化一個BitmapShader著色器對象;
2.將著色器對象set給畫筆;
3.在畫布上繪制圓或圓角即可;
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è)置顏色過濾器 @Override public void setColorFilter(ColorFilter colorFilter) { mPaint.setColorFilter(colorFilter); } //返回不透明度 @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } //返回圖片實際的寬高 @Override public int getIntrinsicWidth() { return mWidth; } @Override public int getIntrinsicHeight() { return mWidth; } }
自定義Drawable有五個方法必須覆寫,draw()、setAlpha()、setColorFilter()、getOpacity(),另外的getIntrinsicWidth()和getIntrinsicHeight()是在view設(shè)置wrap_content時設(shè)置drawable的寬度和高度。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android中一種巧妙的drawable.xml替代方案分享
- Android RippleDrawable 水波紋/漣漪效果的實現(xiàn)
- Android自定義Drawable之在Drawable中部指定透明區(qū)域方法示例
- 淺談Android中Drawable使用知識總結(jié)
- Android開發(fā)基于Drawable實現(xiàn)圓角矩形的方法
- Android Bitmap和Drawable的對比
- Android Drawable和Bitmap的轉(zhuǎn)換實例詳解
- Android DrawableTextView圖片文字居中顯示實例
- Android Drawable必備知識小結(jié)
- Android drawable微技巧,你不知道的drawable細(xì)節(jié)
相關(guān)文章
Android中程序的停止?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開發(fā)解決popupWindow重疊報錯問題
今天小編就為大家分享一篇關(guān)于Android開發(fā)解決popupWindow重疊報錯問題的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10Android RecyclerView的刷新分頁的實現(xiàn)
這篇文章主要介紹了Android RecyclerView的刷新分頁的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05Android Compose Column列表不自動刷新問題
這篇文章主要介紹了Android Compose Column列表數(shù)據(jù)更新列表不刷新的問題,總的來說這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達(dá)的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過程。希望通過這道題能給你帶來一種解題優(yōu)化的思路2023-01-01Android Studio實現(xiàn)格式化XML代碼順序
這篇文章主要介紹了Android Studio實現(xiàn)格式化XML代碼順序,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03Kotlin 協(xié)程 supervisorScope {} 運(yùn)行崩潰解決方法
看過很多?supervisorScope {}?文檔的使用,我照抄一摸一樣的代碼,運(yùn)行就崩潰,最后找到了解決方法,應(yīng)該是kotlin版本更新做過改動,當(dāng)前我使用的是?androidx.core:core-ktx:1.9.0,本文給大家介紹Kotlin 協(xié)程 supervisorScope {} 運(yùn)行崩潰解決方法,感興趣的朋友一起看看吧2024-01-01