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

您的位置:首頁技術文章
文章詳情頁

android自定義view用path畫長方形

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

這次主要是練習一下Android的自定義view和path的相關使用,所以做了一個簡單的demo:自定義一個view,并用path在上面畫一個可以動態改變圓角大小的長方形。

自定義相關屬性

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

<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(位或運算)這樣就可以在布局中同時使用多個屬性了,類似于EditText中定義文字樣式:android:textStyle='bold|italic';round_radius指圓角大小,類型為dimension。

自定義view類

新建一個類繼承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后先前繪制的還會存在 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和貝塞爾曲線的繪制方法來繪制可動態調整圓角大小的長方形,注意每次重繪時要先調用path.reset()清除之前繪制的path,然后再繪制新的path,不然舊的path還會一直存在。

布局中使用自定義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' />

這樣就完成了一個簡單的自定義可調整圓角的長方形,在MainActivity中進行動態控制:

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

實現的最終效果

android自定義view用path畫長方形

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

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩夜夜| 亚洲精品国产偷自在线观看| 九九精品调教| 欧美精品1区| 久久gogo国模啪啪裸体| 日韩二区在线观看| 一区二区国产精品| 午夜在线视频一区二区区别 | 亚洲欧美激情诱惑| 免费久久精品| 日韩av中文字幕一区二区| 亚洲精品日韩久久| 亚洲三级av| 热久久久久久| 日本h片久久| 美女视频黄免费的久久| 麻豆中文一区二区| 国产在线一区不卡| 99精品美女| 亚洲一级网站| 欧美精品一区二区久久| 久久国际精品| 在线 亚洲欧美在线综合一区| 日韩精品成人| 特黄特色欧美大片| 国产精选一区| 国产精品美女久久久| 国产欧美日韩精品高清二区综合区 | 国产精品一区二区99| 国产成人精品福利| 亚洲精品伊人| 香蕉人人精品| 精品国产三区在线| 午夜久久黄色| 日韩电影免费网址| 美国欧美日韩国产在线播放| 日韩国产网站| 高清在线一区| 91九色精品| 中文字幕人成乱码在线观看| 欧美色综合网| 亚洲精一区二区三区| 日韩国产91| 美女久久一区| 国产一区导航| 国产精品日韩| 亚洲国产一区二区在线观看 | 视频一区中文字幕精品| 夜鲁夜鲁夜鲁视频在线播放| 国产成人久久精品麻豆二区| 亚洲激情国产| 在线一区视频| 91精品1区| 国产麻豆一区二区三区| 久久福利一区| 亚洲一区区二区| 野花国产精品入口| 在线综合亚洲| 日韩欧美久久| 欧美中文高清| 国产精品资源| 免费亚洲一区| 国产精区一区二区| 国产极品模特精品一二| 国产精品亚洲综合在线观看| 99精品电影| 精品国产乱码久久久久久樱花| 久久中文字幕一区二区三区| 中文字幕在线高清| 美日韩精品视频| 日韩av电影一区| 激情中国色综合| 亚洲少妇一区| 牛牛精品成人免费视频| 久久精品国产www456c0m| 亚洲欧洲美洲国产香蕉| 另类小说一区二区三区| 激情综合五月| 亚洲精一区二区三区| 91亚洲国产| 婷婷视频一区二区三区| 精品一区二区三区中文字幕视频| 免费不卡中文字幕在线| 国产高清视频一区二区| 国产亚洲永久域名| 精品视频亚洲| 亚洲不卡视频| 国产精品88久久久久久| 麻豆久久久久久久| 免费在线视频一区| 在线天堂中文资源最新版| 99在线观看免费视频精品观看| 久久国产精品久久久久久电车| 欧美日韩a区| 久久香蕉国产| 欧美激情一区| 蜜桃视频第一区免费观看| 鲁鲁在线中文| 久久国产尿小便嘘嘘| 色爱av综合网| 欧美激情久久久久久久久久久| 99国产精品99久久久久久粉嫩| 久久99蜜桃| 日韩欧美2区| 久久国产精品99国产| 欧美性感美女一区二区| 麻豆精品一区二区综合av| 免费日韩av片| 成人日韩精品| 精品久久精品| 国产精品一区高清| 亚洲欧美网站在线观看| 不卡福利视频| 欧美一级二级三级视频| 三级欧美在线一区| 九九久久婷婷| 高清日韩中文字幕| 国产麻豆一区二区三区精品视频| 亚洲视频国产| 视频一区二区国产| 亚洲欧美不卡| 亚洲制服少妇| 亚洲大片在线| 亚洲不卡av不卡一区二区| 国产精品久久久久久久久久10秀| 久久精品资源| 精品一区二区三区中文字幕视频| 久久精品999| 国产伦乱精品| 久久的色偷偷| 成人在线视频区| 亚洲精品88| 五月天久久网站| 韩日一区二区三区| 国产精品免费看| 免费成人在线观看| 日韩高清不卡一区| 日韩区一区二| 国产精选久久| 国产成人精品福利| 久久久久久婷| 一区视频在线| 日本精品一区二区三区在线观看视频| 午夜电影一区| 精品国产麻豆| 免费观看不卡av| 97se亚洲| 在线手机中文字幕| 999在线观看精品免费不卡网站| 亚洲欧洲免费| 97精品国产一区二区三区| 亚洲成人三区| 亚洲精品乱码日韩| 国产极品一区| 一区二区视频欧美| 国产日韩视频| 欧美日韩第一| 国产极品一区| 三级在线观看一区二区| 日本欧美国产| 亚洲精品免费观看| 国产中文在线播放| 日韩av一区二| 国产精品88久久久久久| 国产精品久久久久av蜜臀| 久久精品国产68国产精品亚洲| 亚洲69av| 蜜桃成人精品| 国产精品亚洲综合色区韩国| 老鸭窝毛片一区二区三区| 亚洲综合电影| 国产精品白丝av嫩草影院| 91精品福利| 亚洲福利免费| 日韩成人免费| 欧美国产专区| 亚洲精品进入| 免费久久99精品国产自在现线| 天堂av在线| 成人在线免费观看网站| 在线亚洲欧美| 亚洲激情不卡| 天堂中文在线播放| 久久激情五月婷婷| 综合一区av| 亚洲精选av| 视频一区在线视频| 丝袜美腿一区二区三区| 亚洲国内欧美| 久久久成人网| 91精品国产乱码久久久久久久 | 欧美日韩视频一区二区三区| 国产不卡精品在线| 你懂的亚洲视频| 国产精品免费精品自在线观看| 日韩高清一区在线| 在线综合视频| 免费不卡在线观看| 日韩欧乱色一区二区三区在线| 蜜臀av一区二区在线免费观看|