Android繪制音樂播放器示波器
示波器是在大學(xué)的時候老師教的,但是出來工作一直沒有用到過,漸漸的也就忘記了,現(xiàn)在重新學(xué)習(xí)一下。來看看效果圖:
這里是一個自定義的柱狀圖,然后有一個按鈕,點(diǎn)擊按鈕的時候,這里柱子會不停的運(yùn)動,類似于音樂播放器里示波器的跳動。
跟前面幾個自定義view的方式類似,重寫了onSizeChange()方法和onDraw()方法
先列一下我們要用到的變量:
/**畫筆*/ private Paint mPaint; /**控件的寬度*/ private float mWidth; /**單個柱子的寬度*/ private float mRectWidth; /**單個柱子的高度*/ private float mRectHeight; /**柱子的總個數(shù)*/ private float mRectCount = 10; /**柱子之間的間隔*/ private int offsets = 2; /**Android中的線性漸變*/ private LinearGradient mLinearGradient; /**隨機(jī)的柱子的高度*/ private double mRandom;
所有的變量都在這里了
下面給畫筆初始化
/** * 初始化畫筆 */ private void initView() { mPaint = new Paint(); mPaint.setAntiAlias(true); }
然后在onSizeChange()里面給變量賦值
@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mWidth = getWidth(); mRectHeight = getHeight(); mRectWidth = (int) (mWidth * 0.6 / mRectCount); mLinearGradient = new LinearGradient(0, 0, mRectWidth, mRectHeight, Color.YELLOW, Color.BLUE, Shader.TileMode.CLAMP); mPaint.setShader(mLinearGradient); }
最后繪制柱狀圖
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); for (int i = 0; i < mRectCount; i++) { mRandom = Math.random(); float currentHeight = (float) (mRectHeight * mRandom); canvas.drawRect( (float) (mWidth * 0.4 / 2 + mRectWidth * i + offsets), currentHeight, (float) (mWidth * 0.4 / 2 + mRectWidth * (i + 1)), mRectHeight, mPaint); } }
這個時候,一個音樂播放器的示波器已經(jīng)完成了,但是,這個是靜態(tài)的,接下來,向外面暴露一個方法,用于刷新View,實(shí)現(xiàn)動態(tài)的效果。
public void onStart() {
postInvalidateDelayed(300);
}
每間隔300ms對View進(jìn)行重繪,就可以有一個比較好的視覺效果了。
好了,最后我貼上全部的代碼:
public class MusicLine extends View { private Paint mPaint; private float mWidth; private float mRectWidth; private float mRectHeight; private float mRectCount = 10; private int offsets = 2; private LinearGradient mLinearGradient; private double mRandom; public MusicLine(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initView(); } public MusicLine(Context context, AttributeSet attrs) { super(context, attrs); initView(); } public MusicLine(Context context) { super(context); initView(); } /** * 初始化工具類 */ private void initView() { mPaint = new Paint(); mPaint.setAntiAlias(true); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mWidth = getWidth(); mRectHeight = getHeight(); mRectWidth = (int) (mWidth * 0.6 / mRectCount); mLinearGradient = new LinearGradient(0, 0, mRectWidth, mRectHeight, Color.YELLOW, Color.BLUE, Shader.TileMode.CLAMP); mPaint.setShader(mLinearGradient); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); for (int i = 0; i < mRectCount; i++) { mRandom = Math.random(); float currentHeight = (float) (mRectHeight * mRandom); canvas.drawRect( (float) (mWidth * 0.4 / 2 + mRectWidth * i + offsets), currentHeight, (float) (mWidth * 0.4 / 2 + mRectWidth * (i + 1)), mRectHeight, mPaint); } } public void onStart() { postInvalidateDelayed(300); } }
至此,全部完成了。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android音樂播放器制作 點(diǎn)擊歌曲實(shí)現(xiàn)播放(二)
- Android音樂播放器制作 掃描本地音樂顯示在手機(jī)(一)
- Android簡易音樂播放器實(shí)現(xiàn)代碼
- Android仿音樂播放器功能
- 詳解Android應(yīng)用開發(fā)--MP3音樂播放器代碼實(shí)現(xiàn)(一)
- Android MediaPlayer實(shí)現(xiàn)音樂播放器實(shí)例代碼
- Android 開源在線音樂播放器
- Android 音樂播放器的開發(fā)實(shí)例詳解
- Android基于Service的音樂播放器
- Android音樂播放器制作 加入控制臺(三)
相關(guān)文章
Android漲姿勢知識點(diǎn)之你沒用過的BadgeDrawable
現(xiàn)在Android中有許多的應(yīng)用仿蘋果的在應(yīng)用圖標(biāo)上顯示小紅點(diǎn),下面這篇文章主要給大家介紹了關(guān)于Android漲姿勢知識點(diǎn)之你沒用過的BadgeDrawable的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09Android 開發(fā)系統(tǒng)自帶語音模塊應(yīng)用
本篇文章 主要介紹 Android 開發(fā)自帶語音模塊實(shí)例,在開發(fā)Android系統(tǒng)中會用到系統(tǒng)語音搜索模塊,這里給大家一個參考實(shí)例2016-07-07Android中ExpandableListView的用法實(shí)例
這篇文章主要介紹了Android中ExpandableListView的用法,以實(shí)例形式展示了Android中的下拉list控件的用法,需要的朋友可以參考下2014-10-10Android開發(fā)高仿課程表的布局實(shí)例詳解
這篇文章主要介紹了Android開發(fā)高仿課程表的布局實(shí)例詳解的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-10-10Android 中自定義ContentProvider與ContentObserver的使用簡單實(shí)例
這篇文章主要介紹了Android 中自定義ContentProvider與ContentObserver的使用簡單實(shí)例的相關(guān)資料,這里提供實(shí)例幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下2017-09-09Android實(shí)現(xiàn)計時與倒計時的常用方法小結(jié)
這篇文章主要介紹了Android實(shí)現(xiàn)計時與倒計時的常用方法,總結(jié)并對比分析了幾種常用計時方法的特點(diǎn),具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10