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

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

android自定義view用path畫長(zhǎng)方形

瀏覽:209日期:2022-09-25 08:53:03

這次主要是練習(xí)一下Android的自定義view和path的相關(guān)使用,所以做了一個(gè)簡(jiǎn)單的demo:自定義一個(gè)view,并用path在上面畫一個(gè)可以動(dòng)態(tài)改變圓角大小的長(zhǎng)方形。

自定義相關(guān)屬性

自定義view首先需要在values文件夾下建一個(gè)attrs文件,并在其中定義view的相關(guān)屬性,如下:

<resources> <declare-styleable name='CustomView'> <attr name='round_position'> <flag name='left-top' value='0x1'></flag> <flag name='right-top' value='0x4'></flag> <flag name='left-bottom' value='0x2'></flag> <flag name='right-bottom' value='0x8'></flag> </attr> <attr name='round_radius' format='dimension'></attr> </declare-styleable></resources>

其中round_position指的是圓角的位置,這里屬性類型定為flag(位或運(yùn)算)這樣就可以在布局中同時(shí)使用多個(gè)屬性了,類似于EditText中定義文字樣式:android:textStyle='bold|italic';round_radius指圓角大小,類型為dimension。

自定義view類

新建一個(gè)類繼承View,如下:

public class CustomView extends View { private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); private Path path; private int color = Color.GREEN; private final int LEFT_TOP = 0x1; private final int LEFT_BOTTOM = 0x2; private final int RIGHT_TOP = 0x4; private final int RIGHT_BOTTOM = 0x8; private boolean drawLeftTop; private boolean drawLeftBottom; private boolean drawRightTop; private boolean drawRightBottom; private float radius; public CustomView(Context context) { super(context); initDraw(); } public CustomView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CustomView); int position = typedArray.getInt(R.styleable.CustomView_round_position, 0); radius = typedArray.getDimension(R.styleable.CustomView_round_radius, 0); drawLeftTop = (position & LEFT_TOP) == LEFT_TOP; drawLeftBottom = (position & LEFT_BOTTOM) == LEFT_BOTTOM; drawRightTop = (position & RIGHT_TOP) == RIGHT_TOP; drawRightBottom = (position & RIGHT_BOTTOM) == RIGHT_BOTTOM; typedArray.recycle(); initDraw(); } public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initDraw(); } private void initDraw() { path = new Path(); paint.setColor(Color.GREEN); paint.setAntiAlias(true); paint.setStrokeWidth((float) 5); paint.setStyle(Paint.Style.STROKE); } @Override protected void onDraw(Canvas canvas) { path.reset();//這里很重要,如果不寫這一行,則每次重繪view后先前繪制的還會(huì)存在 path.moveTo(radius, 0); if (drawRightTop) { path.lineTo(getWidth() - radius, 0);// path.cubicTo(radius + getWidth() / 3, 0, radius + getWidth() / 3 * 2, 0, getWidth() - radius, 0); path.cubicTo(getWidth() - radius / 2, 0, getWidth(), radius / 2, getWidth(), radius); } else { path.lineTo(getWidth(), 0);// path.cubicTo(radius + getWidth() / 3, 0, radius + getWidth() / 3 * 2, 0, getWidth(), 0); } path.lineTo(getWidth(), getHeight() - radius);// path.cubicTo(getWidth(), radius + getHeight() / 3, getWidth(), radius + getHeight() / 3 * 2, getWidth(), getHeight() - radius); if (drawRightBottom) { path.cubicTo(getWidth(), getHeight() - radius / 2, getWidth() - radius / 2, getHeight(), getWidth() - radius, getHeight()); } else { path.lineTo(getWidth(), getHeight()); } path.lineTo(radius, getHeight()); if (drawLeftBottom) { path.cubicTo(radius / 2, getHeight(), 0, getHeight() - radius / 2, 0, getHeight() - radius); } else { path.lineTo(0, getHeight()); } path.lineTo(0, radius); if (drawLeftTop) { path.cubicTo(0, radius / 2, radius / 2, 0, radius, 0); } else { path.lineTo(0, 0); path.lineTo(radius, 0); } canvas.drawPath(path, paint); super.onDraw(canvas); } public void setRadius(float radius) { this.radius = radius; } public void refreshView() { invalidate(); }}

這里使用了path和貝塞爾曲線的繪制方法來(lái)繪制可動(dòng)態(tài)調(diào)整圓角大小的長(zhǎng)方形,注意每次重繪時(shí)要先調(diào)用path.reset()清除之前繪制的path,然后再繪制新的path,不然舊的path還會(huì)一直存在。

布局中使用自定義view

<wjc.myrecyclerview.CustomView android: android:layout_width='200dp' android:layout_height='200dp' android:layout_margin='100dp' app:layout_constraintLeft_toLeftOf='parent' app:layout_constraintRight_toRightOf='parent' app:layout_constraintTop_toTopOf='parent' app:round_position='left-bottom|right-bottom|right-top|left-top' />

這樣就完成了一個(gè)簡(jiǎn)單的自定義可調(diào)整圓角的長(zhǎng)方形,在MainActivity中進(jìn)行動(dòng)態(tài)控制:

view.setRadius(progress);view.refreshView();

實(shí)現(xiàn)的最終效果

android自定義view用path畫長(zhǎng)方形

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

標(biāo)簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩国产精品一区二区亚洲| 91久久黄色| 日韩专区一卡二卡| japanese国产精品| 黄色成人精品网站| 亚洲一区二区免费看| 亚洲综合不卡| 亚洲欧美专区| 青青国产精品| 国产精品宾馆| 国产成人免费| 久久久久久久久99精品大| 午夜av成人| 91精品电影| 美女久久一区| 91九色综合| 国产一区二区三区网| 手机在线电影一区| 不卡福利视频| 亚洲精品一区二区在线看| 久久国产福利| 欧美视频二区| 国产成人精品一区二区三区视频| 亚洲伦乱视频| 国产一区成人| 欧美性www| 日韩av在线播放网址| 久久精品电影| 手机精品视频在线观看| 日韩动漫一区| 国产专区精品| 欧美日韩国产传媒| 日韩一区精品视频| 国产欧美成人| 久久九九国产| 亚洲欧美在线专区| 久久只有精品| 亚洲激情中文在线| 亚洲精品三级| 精品一区二区三区亚洲| 91精品婷婷色在线观看| 亚洲午夜久久| 精品国产美女a久久9999| 久久在线电影| 少妇精品久久久一区二区| 国产精品白浆| 香蕉精品久久| 老鸭窝毛片一区二区三区| 欧美伊人影院| 亚洲天堂一区二区| 亚欧洲精品视频在线观看| 黄色网一区二区| 尹人成人综合网| 国产精品伊人| 狠狠久久婷婷| 国产精品一页| 午夜欧美理论片| 国产精品久久久久久久久久白浆| 久久亚洲精品中文字幕蜜潮电影| 日本亚洲欧洲无免费码在线| 91亚洲人成网污www| 综合一区在线| 国产一区二区三区精品在线观看| 99国产精品久久久久久久成人热 | 亚洲综合小说| 国产一区二区精品福利地址| 老鸭窝毛片一区二区三区| 国产一区二区三区四区大秀| 免费成人性网站| 久久青草久久| 国产精品mm| 久久夜色精品| 免费一二一二在线视频 | 欧美精品一区二区三区精品| 国产伦一区二区三区| 国产精品日韩久久久| 国产成人精品免费视| 中文字幕亚洲影视| 三上悠亚国产精品一区二区三区 | 成人午夜精品| 69堂精品视频在线播放| 狠狠色狠狠色综合日日tαg| 激情综合婷婷| 国产调教一区二区三区| av不卡免费看| 日韩激情一区| 国产精品亚洲产品| 美国欧美日韩国产在线播放| 日韩国产欧美| 久久中文字幕一区二区三区| 色8久久久久| 亚洲国产日韩欧美在线| 一本大道色婷婷在线| 精品一区二区三区四区五区| 日韩欧美中文字幕一区二区三区 | 日韩午夜黄色| 欧美日韩精品免费观看视完整| 亚洲精品在线二区| 伊人成人在线视频| 亚洲高清不卡| 婷婷综合六月| 久久久久久夜| 麻豆精品视频在线观看| 色综合视频一区二区三区日韩| 日韩视频不卡| 久久久精品五月天| 亚洲天堂av影院| 久久精品免视看国产成人| 91精品麻豆| 青草av.久久免费一区| 中文字幕日韩高清在线| 日韩一区精品字幕| 伊人久久大香线蕉av超碰演员| 久久狠狠婷婷| 99久久精品费精品国产| 丝袜美腿一区| 日韩一区二区中文| 日韩综合在线| 97精品国产| 国产黄大片在线观看| 福利一区二区| 中文字幕人成乱码在线观看| 精品国产鲁一鲁****| 精品淫伦v久久水蜜桃| 久久99偷拍| 精品久久91| 中文在线中文资源| а√在线中文在线新版| 高清一区二区| 日韩国产欧美一区二区| 成人久久一区| 婷婷国产精品| 日韩视频一区| 亚洲最新av| 日本天堂一区| 久久久精品国产**网站| 国产 日韩 欧美 综合 一区| 中文字幕成在线观看| 日韩一区二区在线免费| 99久精品视频在线观看视频| 欧美特黄一区| 亚洲一区二区三区无吗| 免费久久精品视频| 日韩中文字幕视频网| 久久国产欧美日韩精品| 麻豆中文一区二区| 黑森林国产精品av| 99精品在线观看| 国产精品嫩草99av在线| 中文字幕一区二区av| 欧美久久久网站| 风间由美中文字幕在线看视频国产欧美| 成人午夜在线| 免费视频国产一区| 亚洲精品亚洲人成在线观看| 国产精品极品国产中出| 国产黄大片在线观看| 四虎4545www国产精品| 亚洲二区三区不卡| 日韩一区网站| 国产成人精品亚洲线观看| 久久精品99久久无色码中文字幕| 日韩在线一二三区| 国产精品美女久久久久久不卡| 久久精品日韩欧美| 免费精品国产的网站免费观看| 四虎国产精品免费久久| 精品国产网站| 影音先锋久久| 国产精品久久久久久久免费软件 | 欧美性感美女一区二区| 蜜臀久久99精品久久久画质超高清 | 国产suv精品一区二区四区视频 | 亚洲色图网站| 国产精品久久久网站| 97欧美在线视频| 六月婷婷一区| 激情综合婷婷| 日本大胆欧美人术艺术动态| 国产精品久久久久久av公交车| 欧美日韩在线观看视频小说| 日韩和欧美的一区| 亚洲精品**中文毛片| 亚洲伊人精品酒店| 97精品97| 日韩欧美四区| 午夜精品久久久久久久久久蜜桃| 亚洲精品成人一区| 久久久久久黄| 国产精品综合色区在线观看| 亲子伦视频一区二区三区| 日韩欧美精品一区二区综合视频| 亚洲伊人av| 国产欧美另类| 亚洲一区二区免费看| 国产不卡av一区二区| 亚洲精品九九| 久久美女精品| 麻豆久久一区| 中文字幕av一区二区三区人|