日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Android自定義View圓形圖片控件代碼詳解

瀏覽:23日期:2022-09-21 14:29:48

前言

在日常開發(fā)中,圓形的圖片效果還是很常見的。可以通過給Paint設(shè)置Xfermode來實現(xiàn),這里簡單記錄如下。

實現(xiàn)

實現(xiàn)圓形效果的核心是PorterDuffXfermode,對于PorterDuffXfermode,這里不展開,可以查詢相關(guān)資料。

核心代碼

//繪制背景canvas.drawCircle(mSize / 2, mSize / 2, mSize / 2, mPaint);//設(shè)置模式為:顯示背景層和上層的交集,且顯示上層圖像mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));//繪制要顯示的圖像canvas.drawBitmap(mSrcBitmap, 0, 0, mPaint);//重置XfermodemPaint.setXfermode(null);

自定義屬性

<?xml version='1.0' encoding='utf-8'?><resources> <declare-styleable name='CircleView'> <!--定義資源--> <attr name='src' format='reference' /> <!--定義類型--> <attr name='type' format='enum'> <!--圓形--> <enum name='round' value='1' /> <!--矩形--> <enum name='rect' value='2' /> </attr> </declare-styleable></resources>

自定義控件

public class CircleView extends View { private static final int DEFAULT_SIZE = 200; private static final int DEFAULT_RADIUS = 20; private static final int TYPE_ROUND = 1; private static final int TYPE_RECT = 2; private int mSize; private int mResourceId; private int mType; private Paint mPaint; private Bitmap mSrcBitmap; public CircleView(Context context) { this(context, null); } public CircleView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CircleView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CircleView); mResourceId = ta.getResourceId(R.styleable.CircleView_src, R.mipmap.ic_launcher); mType = ta.getInt(R.styleable.CircleView_type, TYPE_ROUND); ta.recycle(); init(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = getMeasureSize(widthMeasureSpec); int height = getMeasureSize(heightMeasureSpec); mSize = Math.min(width, height); setMeasuredDimension(mSize, mSize); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //繪制背景 if (mSrcBitmap == null) { mSrcBitmap = getScaleBitmap(); } if (mType == TYPE_ROUND) { canvas.drawCircle(mSize / 2, mSize / 2, mSize / 2, mPaint); } else if (mType == TYPE_RECT) { canvas.drawRoundRect(0, 0, mSize, mSize, DEFAULT_RADIUS, DEFAULT_RADIUS, mPaint); } //設(shè)置模式為:顯示背景層和上層的交集,且顯示上層圖像 mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); //繪制要顯示的圖像 canvas.drawBitmap(mSrcBitmap, 0, 0, mPaint); //重置Xfermode mPaint.setXfermode(null); } private void init() { //禁用硬件加速,否則可能無法繪制圓形 setLayerType(LAYER_TYPE_HARDWARE, null); mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setStyle(Paint.Style.FILL); } private int getMeasureSize(int measureSpec) { int mode = MeasureSpec.getMode(measureSpec); int size = MeasureSpec.getSize(measureSpec); return mode == MeasureSpec.EXACTLY ? size : DEFAULT_SIZE; } /** * 獲取縮放后的Bitmap * * @return */ private Bitmap getScaleBitmap() { BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeResource(getResources(), mResourceId, options); options.inSampleSize = calcSampleSize(options, mSize, mSize); options.inJustDecodeBounds = false; return BitmapFactory.decodeResource(getResources(), mResourceId, options); } /** * 計算縮放比例 * * @param option * @param width * @param height * @return */ private int calcSampleSize(BitmapFactory.Options option, int width, int height) { int originWidth = option.outWidth; int originHeight = option.outHeight; int sampleSize = 1; while ((originWidth = originWidth >> 1) > width && (originHeight = originHeight >> 1) > height) { sampleSize = sampleSize << 1; } return sampleSize; }}

注意:如果沒有圓形的效果,那么可能需要禁用硬件加速:setLayerType(LAYER_TYPE_HARDWARE, null)

布局

<?xml version='1.0' encoding='utf-8'?><LinearLayout xmlns:android='http://schemas.android.com/apk/res/android' xmlns:app='http://schemas.android.com/apk/res-auto' xmlns:tools='http://schemas.android.com/tools' android:layout_width='match_parent' android:layout_height='match_parent' android:gravity='center_horizontal' android:orientation='vertical' tools:context='.MainActivity'> <com.wangyz.custom.CircleView android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_margin='10dp' app:src='http://www.b3g6.com/bcjs/@drawable/image' /> <com.wangyz.custom.CircleView android:layout_width='100dp' android:layout_height='100dp' android:layout_margin='10dp' app:src='http://www.b3g6.com/bcjs/@drawable/image' /> <com.wangyz.custom.CircleView android:layout_width='100dp' android:layout_height='100dp' android:layout_margin='10dp' app:src='http://www.b3g6.com/bcjs/@drawable/image' app:type='rect' /></LinearLayout>

效果

Android自定義View圓形圖片控件代碼詳解

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲一区二区日韩| 免费观看不卡av| 日韩精品视频网站| 日韩不卡一二三区| 国产精品视频3p| 青青青免费在线视频| 色吊丝一区二区| 玖玖玖国产精品| 久久99久久人婷婷精品综合| 伊人网在线播放| 在线精品观看| 日韩中文字幕在线一区| 精品一区二区三区免费看 | 亚洲免费成人av在线| 国产伦理久久久久久妇女| 国产videos久久| 尤物精品在线| 久久av中文| 久久午夜影视| 日韩综合一区| 亚洲一区二区免费在线观看| 麻豆91小视频| 午夜国产一区二区| 在线观看亚洲精品福利片| 桃色一区二区| 麻豆成人在线观看| 影音国产精品| 成人国产精品一区二区免费麻豆| 亚洲一区日韩在线| 国产精品成人国产| 国产麻豆综合| 日韩综合一区| 欧美日韩一区二区国产| 国产亚洲观看| 亚洲激情不卡| 久久精品导航| 91一区二区三区四区| 亚洲精品第一| 日韩精品免费一区二区三区| 日韩精品1区2区3区| 精品一区毛片| 欧美日韩一区二区三区视频播放| 国产 日韩 欧美 综合 一区| 国产精品欧美一区二区三区不卡| 在线人成日本视频| 青青在线精品| 综合精品一区| 性欧美xxxx免费岛国不卡电影| 国产经典一区| 亚洲综合色婷婷在线观看| 亚洲福利一区| 日本精品在线中文字幕| 久久精品国产久精国产| 免费黄网站欧美| 一区在线视频观看| 日韩精品网站| 电影亚洲精品噜噜在线观看| 久久一区亚洲| 久久av免费| 欧美国产先锋| 精品久久久中文字幕| 欧美激情福利| 久久久久亚洲精品中文字幕| 国产日韩在线观看视频| 青青草91视频| 国产精品白丝一区二区三区| 欧美日韩一区二区三区不卡视频 | 日韩极品在线观看| 亚洲啊v在线免费视频| 日韩中文字幕区一区有砖一区 | 日韩一区二区三区在线看| 蜜桃伊人久久| 视频一区日韩| 国产欧美日韩精品高清二区综合区| 日本伊人久久| 91精品在线免费视频| 国产精品最新自拍| 欧美国产一级| 国产综合视频| 欧美va亚洲va日韩∨a综合色| 91一区二区三区四区| 欧美sm一区| 亚洲精品国产精品粉嫩| 日本免费新一区视频| 欧美激情日韩| 精品国产精品国产偷麻豆| 一本大道色婷婷在线| 麻豆成人91精品二区三区| 天海翼精品一区二区三区| 久久av在线| 国产日韩欧美一区| 日韩电影免费网站| 亚洲日产国产精品| 免费看av不卡| 欧美在线看片| 亚洲午夜av| 麻豆久久久久久| 九一国产精品| 日本不卡中文字幕| 久久精品高清| 日韩国产在线观看一区| 999久久久免费精品国产| 91精品日本| 欧美午夜不卡影院在线观看完整版免费| 国产精品一线天粉嫩av| 蜜臀久久99精品久久久久久9 | 美女性感视频久久| 蜜臀久久99精品久久久久宅男| av资源新版天堂在线| 久久精品xxxxx| 不卡中文一二三区| 99国产精品视频免费观看一公开 | 国产精品成人国产| 欧美91福利在线观看| 国产区精品区| 不卡在线一区| 日韩欧美精品| 久久精品国产一区二区| 777久久精品| 玖玖玖国产精品| 成午夜精品一区二区三区软件| 久久亚洲美女| 快she精品国产999| 视频一区视频二区在线观看| 秋霞影院一区二区三区| www在线观看黄色| 91偷拍一区二区三区精品| 久久福利在线| 国产精品国码视频| 欧美a级一区二区| 国产无遮挡裸体免费久久| 7777精品| 欧美激情三区| 精品国产三区在线| 久久久久久一区二区| 国产一区二区三区四区大秀 | 亚洲免费观看高清完整版在线观| 午夜一级久久| 男女性色大片免费观看一区二区| 国产精品人人爽人人做我的可爱| 一区久久精品| 欧美日韩精品一区二区三区视频 | 中文字幕中文字幕精品| 在线免费观看亚洲| 欧美亚洲一区二区三区| 国产精品对白| 136国产福利精品导航网址| 午夜欧美理论片| 日韩精品视频中文字幕| 精品中文在线| 亚洲精品极品少妇16p| 亚洲麻豆一区| 国产成人精选| 老牛影视一区二区三区| 日本亚洲最大的色成网站www| 欧美在线看片| 性欧美videohd高精| 蜜臀精品久久久久久蜜臀 | 美女亚洲一区| 日本中文字幕不卡| 欧美片第1页| 日韩中文字幕无砖| 日韩成人a**站| 久久不射网站| 高潮久久久久久久久久久久久久| 好吊日精品视频| 美女国产一区二区三区| 天堂日韩电影| 国产精品xxxav免费视频| 欧美 日韩 国产一区二区在线视频| 日韩欧美中文字幕在线视频| 国产精品久久久久久久免费观看| 水野朝阳av一区二区三区| 久久精品高清| 日本久久二区| 日韩精品国产欧美| 六月婷婷一区| 丝袜美腿亚洲一区| 亚洲欧美视频一区二区三区| 99久久九九| 99riav1国产精品视频| 欧美精品羞羞答答| 精品欧美视频| 精品99久久| 99热精品久久| 亚洲欧洲一区| 日本午夜精品视频在线观看| 日本亚洲不卡| 国产一区国产二区国产三区| 欧美成人a交片免费看| 亚洲电影在线一区二区三区| 欧美一区二区三区激情视频| 免费不卡中文字幕在线| 伊人久久高清| 蜜乳av另类精品一区二区| 国产精品字幕| 国产亚洲一区在线| 国产精品一国产精品| 欧洲一区二区三区精品| 水蜜桃久久夜色精品一区的特点 |