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

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

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

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

前言

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

實(shí)現(xiàn)

實(shí)現(xiàn)圓形效果的核心是PorterDuffXfermode,對(duì)于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); } /** * 計(jì)算縮放比例 * * @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://m.b3g6.com/bcjs/@drawable/image' /> <com.wangyz.custom.CircleView android:layout_width='100dp' android:layout_height='100dp' android:layout_margin='10dp' app:src='http://m.b3g6.com/bcjs/@drawable/image' /> <com.wangyz.custom.CircleView android:layout_width='100dp' android:layout_height='100dp' android:layout_margin='10dp' app:src='http://m.b3g6.com/bcjs/@drawable/image' app:type='rect' /></LinearLayout>

效果

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲综合在线电影| 国产精品视频一区视频二区| 99久久久久国产精品| 精品免费av在线| 久久久久九九精品影院| 国产一区二区三区免费在线| 国产精品成人a在线观看| 久久99高清| 日产精品一区二区| 国产一区二区亚洲| 国产欧美一区二区三区精品酒店| 久久99青青| 一区二区小说| 日韩精品乱码av一区二区| 日韩一级欧洲| 欧美肉体xxxx裸体137大胆| 日韩欧美字幕| 日韩精品中文字幕吗一区二区| 综合激情五月婷婷| 国产精品分类| 精品国产aⅴ| 欧美精品高清| 亚洲欧美日本视频在线观看| 久久一区亚洲| 国产精品毛片久久| 亚洲性图久久| 日韩欧美中文字幕电影| 国产精品jk白丝蜜臀av小说| 91日韩在线| 日本精品不卡| 免费在线观看日韩欧美| 中文字幕在线官网| 成人午夜精品| 亚洲欧美日韩视频二区| 亚洲免费一区三区| 久久精品青草| 在线亚洲欧美| 国产精品综合色区在线观看| 国内自拍视频一区二区三区| 欧美日韩国产亚洲一区| 国产精品17p| 成人精品高清在线视频| 在线视频免费在线观看一区二区| 奇米亚洲欧美| 久久久久久黄| 国产精品美女久久久| 国产丝袜一区| 视频一区二区三区入口| 国产欧美一区二区精品久久久 | 一区在线免费| 国产欧美午夜| 欧美91福利在线观看| 久久精品国产网站| 久久性天堂网| 久久麻豆视频| 亚洲免费婷婷| 国产成人免费| 久久精品99久久无色码中文字幕| 日本精品另类| 欧美亚洲国产一区| 久久精品一区二区国产| 性一交一乱一区二区洋洋av| 国内揄拍国内精品久久| 国产亚洲激情| 国产66精品| 免费在线观看成人| 欧美日韩在线网站| 国内精品亚洲| 日韩和欧美的一区| 日韩午夜av| 黑森林国产精品av| 国产伦精品一区二区三区在线播放| 吉吉日韩欧美| 国产精品观看| 日本久久二区| 人人精品人人爱| 99精品在线免费在线观看| 国产精品久久久久久av公交车| 99视频一区| 丝袜美腿一区| 精品淫伦v久久水蜜桃| 日韩av一区二区在线影视| 亚洲一区欧美二区| 亚洲二区在线| 日韩中文视频| 日本午夜大片a在线观看| 久久不见久久见免费视频7| 亚洲综合日韩| 中文精品在线| 日韩视频一区二区三区在线播放免费观看| 日韩免费在线| 美女av在线免费看| 日本欧美国产| 日韩不卡一区| 精品不卡一区| 91日韩免费| 97欧美在线视频| 久久精品免视看国产成人| 麻豆精品一区二区综合av| 欧美日韩伊人| 日本国产一区| 国产精品一区二区av交换| 一区二区高清| 影音先锋久久精品| 先锋影音久久久| 手机精品视频在线观看| 在线 亚洲欧美在线综合一区| 欧美成人精品| 一区免费视频| 亚洲一二av| 日韩极品在线观看| 国产乱子精品一区二区在线观看| 欧美影院视频| 免费在线观看一区| 在线中文字幕播放| 欧美亚洲激情| 国产亚洲福利| 香蕉久久国产| 日韩在线视频一区二区三区| 日韩av网站在线观看| 国产精品乱战久久久| 久久一区国产| 91精品久久久久久久久久不卡| 99精品综合| 视频在线观看一区| 国产欧美日韩一区二区三区四区 | 美女久久99| 久久久久久一区二区| 久久精品亚洲人成影院| 中文精品在线| 国产日韩亚洲欧美精品| 国产96在线亚洲| 一区视频在线| 国产精品欧美在线观看| 成人看片网站| 日韩精品国产欧美| 樱桃视频成人在线观看| 国产精品婷婷| 你懂的国产精品| 中文亚洲免费| 精品九九久久| 亚洲少妇在线| 国产精品久久久久久模特| 激情六月综合| 国产伦一区二区三区| 五月婷婷六月综合| 国产福利一区二区精品秒拍| 好吊视频一区二区三区四区| 国产精品久久| 在线视频精品| 国产成人精品一区二区三区视频| 日韩欧美综合| 亚久久调教视频| 天堂中文av在线资源库| 欧美日韩夜夜| 日韩在线视频精品| 99国产精品| 久久久久久久欧美精品| 欧美 日韩 国产一区二区在线视频 | 免费人成精品欧美精品| 日韩国产在线观看| 精品视频在线你懂得| 激情婷婷欧美| 日本少妇精品亚洲第一区| 秋霞影院一区二区三区| 男人的天堂久久精品| 免费在线欧美黄色| 欧美日韩日本国产亚洲在线 | 青青草国产成人99久久| 7777精品| 99热精品在线观看| 欧美激情亚洲| 国产亚洲午夜| 国产精品亚洲成在人线| 日本久久综合| 久久黄色影视| 999精品一区| 91精品麻豆| 欧美亚洲日本精品| 亚洲国内精品| 高潮久久久久久久久久久久久久| 亚洲一级特黄| 久久影视三级福利片| 免费日韩av| 一区二区精品伦理...| 国产日产精品一区二区三区四区的观看方式| 国产精选在线| 亚洲a成人v| 日韩国产一区二区三区| 亚洲欧美日本国产| 伊人久久婷婷| 亚洲精品成人图区| 日韩精品免费观看视频| 激情综合在线| 国产一区调教| 久久久91麻豆精品国产一区| 中日韩男男gay无套| 日韩欧美看国产| 国产精品久久久久毛片大屁完整版| 免费黄色成人|