最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實現(xiàn)音頻條形圖效果(仿音頻動畫無監(jiān)聽音頻輸入)

 更新時間:2016年09月19日 10:55:08   作者:山田  
這篇文章主要介紹了Android實現(xiàn)音頻條形圖效果(仿音頻動畫無監(jiān)聽音頻輸入)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

音頻條形圖

如下圖所示就是這次的音頻條形圖:

由于只是自定義View的用法,我們就不去真實地監(jiān)聽音頻輸入了,隨機模擬一些數(shù)字即可。

如果要實現(xiàn)一個如上圖的靜態(tài)音頻條形圖,相信大家應(yīng)該可以很快找到思路,也就是繪制一個個的矩形,每個矩形之間稍微偏移一點距離即可。如下代碼就展示了一種計算坐標(biāo)的方法。

for (int i = 0; i < mRectCount; i++) {
// 矩形的繪制是從左邊開始到上、右、下邊(左右邊距離左邊畫布邊界的距離,上下邊距離上邊畫布邊界的距離)
canvas.drawRect(
(float) (mRectWidth * i + offset),
currentHeight,
(float) ( mRectWidth * (i + 1)),
mRectHeight,
mRectPaint
);
}

如上代碼中,我們通過循環(huán)創(chuàng)建這些小的矩形,其中currentHeight就是每個小矩形的高,通過橫坐標(biāo)的不斷偏移,就繪制出了這些靜態(tài)的小矩形。下面再通過矩形的高度隨機變化模擬音頻,這里直接利用Math.randoom()方法來隨機改變這些高度,并賦值給currentHeight,代碼如下所示。

// 由于只是簡單的案例就不監(jiān)聽音頻輸入,隨機模擬一些數(shù)字即可
mRandom = Math.random();
currentHeight = (float) (mRectHeight * mRandom);

這樣就能實現(xiàn)靜態(tài)效果了,但是如何實現(xiàn)動態(tài)效果呢?其實也是非常簡單的,只要在onDraw()方法中再去調(diào)用invalidate()方法通知View進行重繪就可以了。不過這里不需要每次一繪制完新的矩形就通知View進行重繪,這樣會因為刷新速度太快反而影響效果。因此,我們可以使用如下代碼來進行View的延遲重繪,代碼如下:

posInvalidateDelayed(300);

這樣每隔300ms通知View進行重繪,就可以得到一個比較好的視覺效果了。最后添加一個漸變效果可以使View更加逼真,代碼如下所示:

@Override
protected void onSizeChanged(int w,int h,int oldW,int oldH) {
super.onSizeChanged(w, h, oldW, oldH);
// 漸變效果
LinearGradient mLinearGradient;
// 畫布的寬
int mWidth;
// 獲取畫布的寬
mWidth = getWidth();
// 獲取矩形的最大高度
mRectHeight = getHeight();
// 獲取單個矩形的寬度(減去的部分為到右邊界的間距)
mRectWidth = (mWidth-offset) / mRectCount;
// 實例化一個線性漸變
mLinearGradient = new LinearGradient(
0,
0,
mRectWidth,
mRectHeight,
topColor,
downColor,
Shader.TileMode.CLAMP
);
// 添加進畫筆的著色器
mRectPaint.setShader(mLinearGradient);
}

從這個例子中,我們可以知道,在創(chuàng)建自定義View的時候,需要一步一步來,從一個基本的效果開始,慢慢地添加功能,繪制更復(fù)雜的效果。不論是多么復(fù)雜的自定義View都一定是慢慢迭代起來的功能,所以不要覺得自定義View有多難。千里之行始于足下,只要開始做,慢慢地就能越來越熟練。

代碼

以下是這次的完整代碼:

package com.example.customaf;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Shader;
import android.support.v4.content.ContextCompat;
import android.util.AttributeSet;
import android.view.View;
import com.example.afanalog.R;
/**
* 自定義的音頻模擬條形圖
* Created by shize on 2016/9/5.
*/
public class MyAF extends View {
// 音頻矩形的數(shù)量
private int mRectCount;
// 音頻矩形的畫筆
private Paint mRectPaint;
// 漸變顏色的兩種
private int topColor, downColor;
// 音頻矩形的寬和高
private int mRectWidth, mRectHeight;
// 偏移量
private int offset;
// 頻率速度
private int mSpeed;
public MyAF(Context context) {
super(context);
}
public MyAF(Context context, AttributeSet attrs) {
super(context, attrs);
setPaint(context, attrs);
}
public MyAF(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setPaint(context, attrs);
}
public void setPaint(Context context, AttributeSet attrs){
// 將屬性存儲到TypedArray中
TypedArray ta = context.obtainStyledAttributes(attrs,R.styleable.MyAF);
mRectPaint = new Paint();
// 添加矩形畫筆的基礎(chǔ)顏色
mRectPaint.setColor(ta.getColor(R.styleable.MyAF_AFTopColor,
ContextCompat.getColor(context, R.color.top_color)));
// 添加矩形漸變色的上面部分
topColor=ta.getColor(R.styleable.MyAF_AFTopColor,
ContextCompat.getColor(context, R.color.top_color));
// 添加矩形漸變色的下面部分
downColor=ta.getColor(R.styleable.MyAF_AFDownColor,
ContextCompat.getColor(context, R.color.down_color));
// 設(shè)置矩形的數(shù)量
mRectCount=ta.getInt(R.styleable.MyAF_AFCount, 10);
// 設(shè)置重繪的時間間隔,也就是變化速度
mSpeed=ta.getInt(R.styleable.MyAF_AFSpeed, 300);
// 每個矩形的間隔
offset=ta.getInt(R.styleable.MyAF_AFOffset, 5);
// 回收TypeArray
ta.recycle();
}
@Override
protected void onSizeChanged(int w,int h,int oldW,int oldH) {
super.onSizeChanged(w, h, oldW, oldH);
// 漸變效果
LinearGradient mLinearGradient;
// 畫布的寬
int mWidth;
// 獲取畫布的寬
mWidth = getWidth();
// 獲取矩形的最大高度
mRectHeight = getHeight();
// 獲取單個矩形的寬度(減去的部分為到右邊界的間距)
mRectWidth = (mWidth-offset) / mRectCount;
// 實例化一個線性漸變
mLinearGradient = new LinearGradient(
0,
0,
mRectWidth,
mRectHeight,
topColor,
downColor,
Shader.TileMode.CLAMP
);
// 添加進畫筆的著色器
mRectPaint.setShader(mLinearGradient);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
double mRandom;
float currentHeight;
for (int i = 0; i < mRectCount; i++) {
// 由于只是簡單的案例就不監(jiān)聽音頻輸入,隨機模擬一些數(shù)字即可
mRandom = Math.random();
currentHeight = (float) (mRectHeight * mRandom);
// 矩形的繪制是從左邊開始到上、右、下邊(左右邊距離左邊畫布邊界的距離,上下邊距離上邊畫布邊界的距離)
canvas.drawRect(
(float) (mRectWidth * i + offset),
currentHeight,
(float) ( mRectWidth * (i + 1)),
mRectHeight,
mRectPaint
);
}
// 使得view延遲重繪
postInvalidateDelayed(mSpeed);
}
}

布局文件的完整代碼:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.afanalog.MainActivity">
<com.example.customaf.MyAF
android:layout_width="match_parent"
android:layout_height="match_parent"
custom:AFCount="15"
custom:AFDownColor="@color/down_color"
custom:AFSpeed="300"
custom:AFTopColor="@color/top_color"
custom:AFOffset="15"
/>
</LinearLayout>

以上所述是小編給大家介紹的Android實現(xiàn)音頻條形圖效果(仿音頻動畫無監(jiān)聽音頻輸入),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 查看apk簽名信息方法

    查看apk簽名信息方法

    用shell寫了一個查看apk簽名的腳本,下面與大家分享下如何查看apk簽名信息,感興趣的朋友可以了解下哈
    2013-06-06
  • Android獲取應(yīng)用程序大小的方法

    Android獲取應(yīng)用程序大小的方法

    這篇文章主要介紹了Android獲取應(yīng)用程序大小的方法,有需要的朋友可以參考一下
    2014-01-01
  • Android使用Websocket實現(xiàn)聊天室

    Android使用Websocket實現(xiàn)聊天室

    這篇文章主要為大家詳細(xì)介紹了Android使用Websocket實現(xiàn)聊天室,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 學(xué)習(xí)使用Android Chronometer計時器

    學(xué)習(xí)使用Android Chronometer計時器

    Chronometer是一個簡單的計時器,你可以給它一個開始時間,并以計時,或者如果你不給它一個開始時間,它將會使用你的時間通話開始,這篇文章主要幫助大家學(xué)習(xí)掌握使用Android Chronometer計時器,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Android實現(xiàn)象棋游戲

    Android實現(xiàn)象棋游戲

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)象棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 深入了解Android中的AsyncTask

    深入了解Android中的AsyncTask

    本文主要介紹了Android中AsyncTask的相關(guān)知識。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • Android自定義View實現(xiàn)可以拖拽的GridView

    Android自定義View實現(xiàn)可以拖拽的GridView

    這篇文章主要為大家詳細(xì)介紹了Android自定義View實現(xiàn)可以拖拽的GridView,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 實例解析Android ImageView的scaleType屬性

    實例解析Android ImageView的scaleType屬性

    通過本文給大家介紹ImageView這個控件的一些使用方法,以及其最重要的一個屬性: scaleType,對imageview的scaletype相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • Bootstrap 下拉菜單.dropdown的具體使用方法

    Bootstrap 下拉菜單.dropdown的具體使用方法

    這篇文章主要介紹了Bootstrap 下拉菜單.dropdown的具體使用方法,詳細(xì)講解下拉菜單的交互,有興趣的可以了解一下
    2017-10-10
  • Android編程實現(xiàn)調(diào)用相冊、相機及拍照后直接裁剪的方法

    Android編程實現(xiàn)調(diào)用相冊、相機及拍照后直接裁剪的方法

    這篇文章主要介紹了Android編程實現(xiàn)調(diào)用相冊、相機及拍照后直接裁剪的方法,涉及Android拍照及圖形處理相關(guān)操作技巧,需要的朋友可以參考下
    2017-02-02

最新評論

阿鲁科尔沁旗| 离岛区| 玉环县| 哈巴河县| 车致| 海晏县| 礼泉县| 清丰县| 儋州市| 昭平县| 北辰区| 瓦房店市| 高青县| 枝江市| 凤庆县| 油尖旺区| 庆元县| 法库县| 上饶市| 温宿县| 唐河县| 武清区| 秦皇岛市| 隆回县| 余干县| 新闻| 平度市| 荣成市| 沙田区| 饶阳县| 沙洋县| 芜湖市| 怀化市| 黎城县| 呼伦贝尔市| 社会| 察雅县| 古交市| 达州市| 多伦县| 沽源县|