亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

自定義控件實戰<四> 音量增減控件

2019-11-06 10:03:35
字體:
來源:轉載
供稿:網友

上一篇文章實現了一個動態的圓弧控件,這篇文章在此基礎上面繼續實現一個簡單的音量增減控件

一、首先看一下我們這次要實現的效果圖:

效果圖

二、在attrs.xml中添加自定義屬性:

<?xml version="1.0" encoding="utf-8"?><resources> <attr name="maxVoice" format="integer"/> <attr name="currentVoice" format="integer"/> <declare-styleable name="Voice三、對應的布局文件:<?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:orientation="horizontal" android:gravity="center_horizontal" android:padding="20dp" android:background="@m四、SimpleView_04自定義控件代碼:public class SimpleView_04 extends View { /** * 最大音量 */ private int maxVoice; /** * 當前音量 */ private int currentVoice; private Rect rectImage; public SimpleView_04(Context context) { this(context, null); } public SimpleView_04(Context context, AttributeSet attrs) { this(context, attrs, 0); } public SimpleView_04(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); /** * 獲得我們所定義的自定義樣式屬性 */ TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.VoiceProgressBar, defStyleAttr, 0); int length = a.getIndexCount(); for (int i = 0; i < length; i++) { int attr = a.getIndex(i); switch (attr) { case R.styleable.VoiceProgressBar_maxVoice: maxVoice = a.getInt(attr, 15); break; case R.styleable.VoiceProgressBar_currentVoice: currentVoice = a.getInt(attr, 5); break; } } a.recycle(); rectImage = new Rect(); } //增加音量 public void addVoice(){ if(currentVoice < maxVoice) { currentVoice++; postInvalidate(); } } //減少音量 public void subVoice(){ if(currentVoice > 0){ currentVoice--; postInvalidate(); } } //重寫onDraw方法,繪制音量圖案 @Override protected void onDraw(Canvas canvas) { Bitmap bitmapSilence = scaleBitmap(R.mipmap.silence); Bitmap bitmapVoice = scaleBitmap(R.mipmap.voice); Paint mPaint = new Paint(); mPaint.setAntiAlias(true); // 消除鋸齒 mPaint.setStrokeWidth(5); // 設置圓環的寬度 mPaint.setStrokeCap(Paint.Cap.ROUND); // 定義線段斷電形狀為圓頭 mPaint.setAntiAlias(true); // 消除鋸齒 mPaint.setStyle(Paint.Style.STROKE); // 設置空心 RectF oval = new RectF(); //RectF對象 oval.left = getPaddingLeft(); //左邊 oval.top = getPaddingTop(); //上邊 oval.right = getMeasuredWidth()-getPaddingRight(); //右邊 oval.bottom = getMeasuredHeight()-getPaddingBottom(); //下邊 mPaint.setColor(Color.WHITE); for (int i=0; i<maxVoice; i++){ canvas.drawArc(oval, 40-20.77f*i, -5f, false, mPaint); //繪制圓弧 } mPaint.setColor(Color.BLACK); for (int i=0; i<currentVoice; i++){ canvas.drawArc(oval, 40-20.77f*i, -5f, false, mPaint); //繪制圓弧 } int mWidth = getMeasuredWidth(); int mHeight = getMeasuredHeight(); if(currentVoice == 0){ rectImage.left = mWidth/2 - bitmapSilence.getWidth()/2; rectImage.right = mWidth/2 + bitmapSilence.getWidth()/2; rectImage.top = mHeight / 2 - bitmapSilence.getHeight() / 2; rectImage.bottom = mHeight/2 + bitmapSilence.getHeight()/2; canvas.drawBitmap(bitmapSilence,null,rectImage,mPaint); }else{ rectImage.left = mWidth/2 - bitmapVoice.getWidth()/2; rectImage.right = mWidth/2 + bitmapVoice.getWidth()/2; rectImage.top = mHeight/2 - bitmapVoice.getHeight()/2; rectImage.bottom = mHeight/2 + bitmapVoice.getHeight()/2; canvas.drawBitmap(bitmapVoice,null,rectImage,mPaint); } } //對獲取到的位圖進行大小縮放 private Bitmap scaleBitmap(int id) { Bitmap mTImage = BitmapFactory.decodeResource(getResources(), id); // 獲得圖片的寬高 int width = mTImage.getWidth(); int height = mTImage.getHeight(); // 設置想要的大小 int newWidth = (getMeasuredWidth()-getPaddingLeft()-getPaddingRight())*2/3; int newHeight = (getMeasuredHeight()-getPaddingTop()-getPaddingBottom())*2/3; // 計算縮放比例 float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; // 取得想要縮放的matrix參數 Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight); // 得到新的圖片 return Bitmap.createBitmap(mTImage, 0, 0, width, height, matrix, true); }}

到這里基本就實現了我們需要的自定義控件了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91国产美女在线观看| 亚洲激情视频在线| 国产亚洲精品久久久| 78色国产精品| 日本sm极度另类视频| 亚洲综合最新在线| 亚洲综合中文字幕在线| 国产日韩欧美视频在线| 欧美人在线视频| 亚洲欧美资源在线| 国产亚洲欧洲高清| 久久久视频精品| 亚洲精品一区二区在线| 日韩高清a**址| 亚洲精品理论电影| 亚洲精品久久久久久久久久久久| 欧美日韩中文字幕在线视频| 欧美洲成人男女午夜视频| 亚洲精品videossex少妇| 97国产一区二区精品久久呦| 欧美怡春院一区二区三区| 欧美另类在线播放| 国产精品自产拍高潮在线观看| 日韩av手机在线看| 亚洲一区中文字幕在线观看| 中文字幕欧美精品日韩中文字幕| 欧美激情三级免费| 午夜精品免费视频| 亚洲精品永久免费| 奇米一区二区三区四区久久| 国内精品小视频| 日韩av在线免费播放| 91丝袜美腿美女视频网站| 欧美在线视频免费播放| 日韩欧美成人网| 欧美大片在线影院| 亚洲欧美综合图区| 精品美女久久久久久免费| 亚洲一区二区三区乱码aⅴ| 亚洲最大av网站| 北条麻妃一区二区三区中文字幕| 国产日韩综合一区二区性色av| 亚洲sss综合天堂久久| 欧美日韩激情小视频| 欧美成人午夜激情在线| 久久久国产精彩视频美女艺术照福利| 成人免费淫片视频软件| 亚洲国产高清自拍| 成人免费在线视频网址| 欧美激情国产高清| 欧美美女18p| 欧美整片在线观看| 成人黄色免费片| 精品在线欧美视频| 国产美女精品视频| 欧美电影免费观看大全| 日韩av中文字幕在线播放| 成人日韩在线电影| 色悠久久久久综合先锋影音下载| 国产精品高潮呻吟久久av无限| 亚洲高清在线观看| 黄色91在线观看| 午夜精品久久久久久久久久久久久| 欧美视频免费在线| 亚洲a中文字幕| 日本精品在线视频| 美日韩精品免费视频| 中文字幕日韩av电影| 91精品国产免费久久久久久| 亚洲成人网久久久| 国产精品成人av性教育| 欧美成人精品在线视频| 精品久久久久久国产91| 久久天天躁狠狠躁夜夜av| 91久久久久久久一区二区| 国产精品h在线观看| 在线日韩第一页| 日韩av电影在线播放| 亚洲精品一区二三区不卡| 欧美洲成人男女午夜视频| 欧美日韩中国免费专区在线看| 91国内免费在线视频| 一区二区国产精品视频| 精品中文字幕乱| 国产精品美女久久久免费| 久久久国产在线视频| 91免费在线视频网站| 国产精品亚洲综合天堂夜夜| 欧美裸身视频免费观看| 97婷婷涩涩精品一区| 亚洲伦理中文字幕| 国产日韩在线亚洲字幕中文| 九九热r在线视频精品| 亚洲精品白浆高清久久久久久| 亚洲最新在线视频| 色综合色综合久久综合频道88| 精品国产乱码久久久久久天美| 亚洲字幕在线观看| 热re91久久精品国99热蜜臀| 亚洲视频在线看| 中文字幕日韩综合av| 国产精品中文字幕在线观看| 国产性色av一区二区| 日韩中文字幕精品| 中文字幕av一区二区三区谷原希美| 日韩欧美国产黄色| 欧美高清在线播放| 国产免费亚洲高清| 亚洲热线99精品视频| 亚洲18私人小影院| 在线看片第一页欧美| 久久深夜福利免费观看| 亚洲在线免费观看| 永久免费看mv网站入口亚洲| 久久香蕉国产线看观看av| 91免费看片网站| 日韩欧美在线国产| 国产精品高清免费在线观看| 一区二区亚洲欧洲国产日韩| 精品福利一区二区| 久久久人成影片一区二区三区观看| 成人精品视频99在线观看免费| 欧美成人免费一级人片100| 国产精品久久9| 日韩欧美成人精品| 欧美国产激情18| 狠狠操狠狠色综合网| 亚洲毛片在线看| 最近的2019中文字幕免费一页| 精品国产一区av| 亲爱的老师9免费观看全集电视剧| 国产在线播放不卡| www.欧美三级电影.com| 成人h片在线播放免费网站| 国产精品久久久久久久午夜| 91亚洲精品久久久| 久久久精品美女| 欧美日韩在线影院| 在线观看欧美日韩国产| 亚洲综合精品一区二区| 国产精品专区h在线观看| 亚洲成人在线视频播放| 欧美怡红院视频一区二区三区| 97色在线视频观看| 亚洲成色777777女色窝| 欧美日韩国产中文精品字幕自在自线| 日韩女优人人人人射在线视频| 欧美乱大交xxxxx另类电影| 欧美日韩另类字幕中文| 欧美理论片在线观看| 国产日韩欧美91| 国产精品美女www| 欧美日韩在线第一页| 国产成人高潮免费观看精品| 国产精品综合久久久| 色妞在线综合亚洲欧美| 日韩久久精品成人| 亚洲影院色在线观看免费| 精品人伦一区二区三区蜜桃网站| 国产精品女主播视频| 中文字幕日韩视频| 亚洲精品网址在线观看| 欧美一级bbbbb性bbbb喷潮片| 国产美女精彩久久|