Android自定義Drawable實現(xiàn)圓形和圓角
更新時間:2017年09月27日 11:50:28 作者:hust_twj
這篇文章主要為大家詳細介紹了Android自定義Drawable實現(xiàn)圓形和圓角,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了自定義Drawable實現(xiàn)圓形和圓角的具體代碼,供大家參考,具體內(nèi)容如下
圓形
package com.customview.widget; 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; import android.support.annotation.IntRange; import android.support.annotation.NonNull; import android.support.annotation.Nullable; /** * 自定義Drawable 實現(xiàn)圓形圖片 * Created by hust_twj on 2017/9/26. */ public class CircleDrawable extends Drawable { private Paint mPaint; private int mWidth; //寬/高,直徑 private Bitmap mBitmap; public CircleDrawable(Bitmap bitmap) { this.mBitmap = bitmap; BitmapShader bitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);//著色器 水平和豎直都需要填充滿 mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setShader(bitmapShader); mWidth = Math.min(mBitmap.getWidth(), mBitmap.getHeight()); //寬高的最小值作為直徑 } @Override public void draw(@NonNull Canvas canvas) { canvas.drawCircle(mWidth/2, mWidth/2, mWidth/2, mPaint); //繪制圓形 } @Override public void setAlpha(@IntRange(from = 0, to = 255) int i) { mPaint.setAlpha(i); } @Override public void setColorFilter(@Nullable ColorFilter colorFilter) { mPaint.setColorFilter(colorFilter); } @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; //設置系統(tǒng)默認,讓drawable支持和窗口一樣的透明度 } //還需要從重寫以下2個方法,返回drawable實際寬高 @Override public int getIntrinsicWidth() { return mWidth; } @Override public int getIntrinsicHeight() { return mWidth; } }
圓角:
package com.customview.widget; 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.RectF; import android.graphics.Shader; import android.graphics.drawable.Drawable; import android.support.annotation.IntRange; import android.support.annotation.NonNull; import android.support.annotation.Nullable; /** * 自定義Drawable 實現(xiàn)圓角圖片 * Created by hust_twj on 2017/9/26. */ public class RoundCornerDrawable extends Drawable { private Paint mPaint; private RectF rectF;//定義矩形區(qū)域 private Bitmap mBitmap; public RoundCornerDrawable(Bitmap bitmap) { this.mBitmap = bitmap; BitmapShader bitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);//著色器 水平和豎直都需要填充滿 mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setShader(bitmapShader); //rectF = new RectF(0, 0, bitmap.getWidth(), bitmap.getHeight()); } @Override public void draw(@NonNull Canvas canvas) { //RectF:圓角矩形區(qū)域 canvas.drawRoundRect(new RectF(0, 0, mBitmap.getWidth(), mBitmap.getHeight()),100, 100, mPaint);//rx:x方向上的圓角半徑; ry:y方向上的圓角半徑。 } /* @Override public void setBounds(int left, int top, int right, int bottom) { super.setBounds(left, top, right, bottom); rectF = new RectF(left, top, right, bottom); }*/ @Override public void setAlpha(@IntRange(from = 0, to = 255) int i) { mPaint.setAlpha(i); } @Override public void setColorFilter(@Nullable ColorFilter colorFilter) { mPaint.setColorFilter(colorFilter); } @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; //設置系統(tǒng)默認,讓drawable支持和窗口一樣的透明度 } //還需要從重寫以下2個方法,返回drawable實際寬高 @Override public int getIntrinsicWidth() { return mBitmap.getWidth(); } @Override public int getIntrinsicHeight() { return mBitmap.getHeight(); } }
MainActivity中:
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.XXX); imageView.setImageDrawable(new RoundCornerDrawable(bitmap));
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- Android實現(xiàn)圓形圖片或者圓角圖片
- Android將Glide動態(tài)加載不同大小的圖片切圓角與圓形的方法
- Android開發(fā)使用Drawable繪制圓角與圓形圖案功能示例
- Android中Glide加載圓形圖片和圓角圖片實例代碼
- Android自定義控件之圓形、圓角ImageView
- Android實現(xiàn)圓角矩形和圓形ImageView的方式
- Android自定義view實現(xiàn)圓形、圓角和橢圓圖片(BitmapShader圖形渲染)
- Android自定義控件之圓形/圓角的實現(xiàn)代碼
- android 實現(xiàn)圓角圖片解決方案
- Android基于Fresco實現(xiàn)圓角和圓形圖片
相關文章
Android調(diào)節(jié)屏幕亮度實現(xiàn)代碼
這篇文章主要介紹了Android調(diào)節(jié)屏幕亮度實現(xiàn)代碼,調(diào)節(jié)屏幕亮度時,先設置當前activity亮度,再并保存為系統(tǒng)亮度即可,本文分別給出兩個步驟的實現(xiàn)代碼,需要的朋友可以參考下2015-05-05Android 接收推送消息跳轉(zhuǎn)到指定頁面的方法
這篇文章主要介紹了Android 接收推送消息跳轉(zhuǎn)到指定頁面的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01詳解Android開發(fā)中ContentObserver類的使用
這篇文章主要介紹了詳解Android開發(fā)中ContentObserver類的使用,ContentObserver內(nèi)容觀察者主要用來監(jiān)聽uri的改變請情況,需要的朋友可以參考下2016-04-04Android三種網(wǎng)絡通訊方式及Android的網(wǎng)絡通訊機制
在android平臺目前提供了三種網(wǎng)絡接口可以使用:分別是java.net.*(標準Java接口)、Org.apache接口和Android.net.*(Android網(wǎng)絡接口),本文主要給大家介紹android三種網(wǎng)絡通訊方式及android的網(wǎng)絡通訊機制,小伙伴們一起學習吧2015-11-11Android TextView和ImageView簡單說明
Android TextView和ImageView簡單說明,需要的朋友可以參考一下2013-03-03Flutter使用AnimatedOpacity實現(xiàn)圖片漸現(xiàn)動畫
其實在Flutter中提供了一些封裝好的動畫組件,以便我們快速應用。本文將利用其中的AnimatedOpacity組件實現(xiàn)圖片漸現(xiàn)動畫效果,需要的可以參考一下2022-03-03