當前位置:首頁 » 安卓系統 » android繪制波形

android繪制波形

發布時間: 2022-06-03 06:48:56

① android中這樣的曲線要怎麼繪制

推薦你幾個相關開源項目,可以根據需要自己選擇,自己畫還是比較麻煩的:
MPAndroidChart
強大的圖表繪制工具,支持折線圖、面積圖、散點圖、時間圖、柱狀圖、條圖、餅圖、氣泡圖、圓環圖、范圍(高至低)條形圖、網狀圖及各種圖的結合;支持圖的拖拽縮放;支持 Android 2.2 以上,支持橫縱軸縮放,多指縮放,展現動畫、高亮、保存到 sdcard、從文件讀取圖表
achartengine
強大的圖表繪制工具,支持折線圖、面積圖、散點圖、時間圖、柱狀圖、條圖、餅圖、氣泡圖、圓環圖、范圍(高至低)條形圖、撥號圖/表、立方線圖及各種圖的結合
GraphView
繪制圖表和曲線圖的View,可用於Android上的曲形圖、柱狀圖、波浪圖展示
HoloGraphLibrary
繪制線狀圖、柱狀圖、餅狀圖
XCL-Charts
XCL-Charts基於原生的Canvas來繪制各種圖表,在設計時,盡量在保證開發效率的同時,給使用者提供足夠多的定製化能力。因此使用簡便,同時具有相當靈活的定製能力。目前支持3D/非3D柱形圖(Bar Chart)、3D/非3D餅圖(Pie Chart)、堆積圖(Stacked Bar Chart)、面積圖(Area Chart)、 折線圖(Line Chart)、曲線圖(Spline Chart)、環形圖(Dount Chart)、南丁格爾玫瑰圖(Rose Chart)、儀表盤(Dial Chart)、刻度盤(Gauge Chart)、雷達圖(Radar Chart)、圓形圖(Circle Chart)等圖表。其它特性還包括支持圖表縮放、手勢移動、動畫顯示效果、高密度柱形顯示、圖表分界定製線、多圖表的混合顯示及同數據源不同類型圖表切換等。
EazeGraph
Android 圖表庫,支持柱狀圖、分層柱狀圖、餅狀圖、線性圖
WilliamChart
繪制圖表的庫,支持LineChartView、BarChartView和StackBarChartView三中圖表類型,並且支持 Android 2.2及以上的系統。
HelloCharts for Android
支持折線圖、柱狀圖、餅圖、氣泡圖、組合圖;支持預覽、放大縮小,滾動,部分圖表支持動畫;支持 Android 2.2 以上

這些項目都可以在GitHub 搜索到。

② android 使用canvas畫線,如何保證快速畫出圓滑的曲線

[mw_shl_code=java,true] RectF rect = new RectF(0, 0, radii, radii); // 圓形弧度需要的區域(左上角的x,y坐標 ,及右下角x,y坐標) Paint paint = new Paint(); paint.setColor(r.getColor(R.color.bg_color_1)); canvas.drawCircle(radii/2, radii/2, radii/2, paint);[/mw_shl_code]

③ 如何給Imageview 設置水波紋效果

假設圖片名是[email protected]用[buttonSetBackgroundImage:[UIImageimageNamed:@"myImage"]];就可以了。多少個button公用一張圖片都是可以的,不會出現沖突問題,系統會根據這個圖片生成N個實例對象。

④ android 怎麼繪制時時音頻波形圖

安卓開發音頻mic口接收20khz的波形的方法? 一、手機音頻通信的特點 1、 通用性強:在智能手機普及的今天,手機的對外通信介面多種多樣,而其中以3.5mm的音頻介面通用新最強,基本所有的手機、平板電腦都會有這個介面,所以在一些要求通用性的設...

⑤ android 如何做到播放音樂時動態波形



packagecom.AudioFx;

importandroid.app.Activity;
importandroid.content.Context;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.Paint;
importandroid.graphics.Rect;
importandroid.media.AudioManager;
importandroid.media.MediaPlayer;
importandroid.media.audiofx.Equalizer;
importandroid.media.audiofx.Visualizer;
importandroid.os.Bundle;
importandroid.util.Log;
importandroid.view.Gravity;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.view.WindowManager;
importandroid.widget.LinearLayout;
importandroid.widget.SeekBar;
importandroid.widget.TextView;


{
privatestaticfinalStringTAG="AudioFxActivity";

_HEIGHT_DIP=160f;

;
privateVisualizermVisualizer;
privateEqualizermEqualizer;

;
;
;
privateTextViewmInfoView;

@Override
publicvoidonCreate(Bundleicicle)
{
super.onCreate(icicle);

mStatusTextView=newTextView(this);

mLinearLayout=newLinearLayout(this);
mLinearLayout.setOrientation(LinearLayout.VERTICAL);
mLinearLayout.addView(mStatusTextView);

setContentView(mLinearLayout);

//CreatetheMediaPlayer
mMediaPlayer=MediaPlayer.create(this,R.raw.my_life);
Log.d(TAG,
"MediaPlayeraudiosessionID:"
+mMediaPlayer.getAudioSessionId());

setupVisualizerFxAndUI();
setupEqualizerFxAndUI();

//
//receivedata,and
//whenitmakessensetoreceivedata.
mVisualizer.setEnabled(true);

//Whenthestreamends,wedon'tneedtocollectanymoredata.We
//don'tdothisin
//,
//non-Visualizerrelatedcode
//inthiscallback.
mMediaPlayer.setOnCompletionListener(newMediaPlayer.OnCompletionListener()
{
publicvoidonCompletion(MediaPlayermediaPlayer)
{
mVisualizer.setEnabled(false);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setVolumeControlStream(AudioManager.STREAM_SYSTEM);
mStatusTextView.setText("音樂播放完畢");
}
});

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
mMediaPlayer.start();
mStatusTextView.setText("播放音樂中....");
}

()
{
//CreatetheEqualizerobject(anAudioEffectsubclass)andattachit
//toourmediaplayer,
//withadefaultpriority(0).
mEqualizer=newEqualizer(0,mMediaPlayer.getAudioSessionId());
mEqualizer.setEnabled(true);

TextVieweqTextView=newTextView(this);
eqTextView.setText("均衡器:");
mLinearLayout.addView(eqTextView);

shortbands=mEqualizer.getNumberOfBands();

finalshortminEQLevel=mEqualizer.getBandLevelRange()[0];
finalshortmaxEQLevel=mEqualizer.getBandLevelRange()[1];

for(shorti=0;i<bands;i++)
{
finalshortband=i;

TextViewfreqTextView=newTextView(this);
freqTextView.setLayoutParams(newViewGroup.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
freqTextView.setGravity(Gravity.CENTER_HORIZONTAL);
freqTextView.setText((mEqualizer.getCenterFreq(band)/1000)
+"Hz");
mLinearLayout.addView(freqTextView);

LinearLayoutrow=newLinearLayout(this);
row.setOrientation(LinearLayout.HORIZONTAL);

TextViewminDbTextView=newTextView(this);
minDbTextView.setLayoutParams(newViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
minDbTextView.setText((minEQLevel/100)+"dB");

TextViewmaxDbTextView=newTextView(this);
maxDbTextView.setLayoutParams(newViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
maxDbTextView.setText((maxEQLevel/100)+"dB");

LinearLayout.LayoutParamslayoutParams=newLinearLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.weight=1;
SeekBarbar=newSeekBar(this);
bar.setLayoutParams(layoutParams);
bar.setMax(maxEQLevel-minEQLevel);
bar.setProgress(mEqualizer.getBandLevel(band));

bar.setOnSeekBarChangeListener(newSeekBar.OnSeekBarChangeListener()
{
publicvoidonProgressChanged(SeekBarseekBar,intprogress,
booleanfromUser)
{
mEqualizer.setBandLevel(band,(short)(progress+minEQLevel));
}

(SeekBarseekBar)
{
}

publicvoidonStopTrackingTouch(SeekBarseekBar)
{
}
});

row.addView(minDbTextView);
row.addView(bar);
row.addView(maxDbTextView);

mLinearLayout.addView(row);
}
}

()
{
mVisualizerView=newVisualizerView(this);
mVisualizerView.setLayoutParams(newViewGroup.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
(int)(VISUALIZER_HEIGHT_DIP*getResources()
.getDisplayMetrics().density)));
mLinearLayout.addView(mVisualizerView);

mInfoView=newTextView(this);
StringinfoStr="";

int[]csr=Visualizer.getCaptureSizeRange();
if(csr!=null)
{
StringcsrStr="CaptureSizeRange:";
for(inti=0;i<csr.length;i++)
{
csrStr+=csr[i];
csrStr+="";
}
infoStr+=csrStr;
}

finalintmaxCR=Visualizer.getMaxCaptureRate();

infoStr=infoStr+" MaxCaptureRate:"+maxCR;

mInfoView.setText(infoStr);
mLinearLayout.addView(mInfoView);

mVisualizer=newVisualizer(mMediaPlayer.getAudioSessionId());
mVisualizer.setCaptureSize(256);
mVisualizer.setDataCaptureListener(
newVisualizer.OnDataCaptureListener()
{
(Visualizervisualizer,
byte[]bytes,intsamplingRate)
{
mVisualizerView.updateVisualizer(bytes);
}

publicvoidonFftDataCapture(Visualizervisualizer,
byte[]fft,intsamplingRate)
{
mVisualizerView.updateVisualizer(fft);
}
},maxCR/2,false,true);
}

@Override
protectedvoidonPause()
{
super.onPause();

if(isFinishing()&&mMediaPlayer!=null)
{
mVisualizer.release();
mEqualizer.release();
mMediaPlayer.release();
mMediaPlayer=null;
}
}

/**
*
*{@linkVisualizer.OnDataCaptureListener#onWaveFormDataCapture}
*/

{
privatebyte[]mBytes;
privatefloat[]mPoints;
privateRectmRect=newRect();

privatePaintmForePaint=newPaint();
privateintmSpectrumNum=48;
privatebooleanmFirst=true;

publicVisualizerView(Contextcontext)
{
super(context);
init();
}

privatevoidinit()
{
mBytes=null;

mForePaint.setStrokeWidth(8f);
mForePaint.setAntiAlias(true);
mForePaint.setColor(Color.rgb(0,128,255));
}

publicvoipdateVisualizer(byte[]fft)
{
if(mFirst)
{
mInfoView.setText(mInfoView.getText().toString()+" CaptureSize:"+fft.length);
mFirst=false;
}


byte[]model=newbyte[fft.length/2+1];

model[0]=(byte)Math.abs(fft[0]);
for(inti=2,j=1;j<mSpectrumNum;)
{
model[j]=(byte)Math.hypot(fft[i],fft[i+1]);
i+=2;
j++;
}
mBytes=model;
invalidate();
}

@Override
protectedvoidonDraw(Canvascanvas)
{
super.onDraw(canvas);

if(mBytes==null)
{
return;
}

if(mPoints==null||mPoints.length<mBytes.length*4)
{
mPoints=newfloat[mBytes.length*4];
}

mRect.set(0,0,getWidth(),getHeight());

//繪制波形
//for(inti=0;i<mBytes.length-1;i++){
//mPoints[i*4]=mRect.width()*i/(mBytes.length-1);
//mPoints[i*4+1]=mRect.height()/2
//+((byte)(mBytes[i]+128))*(mRect.height()/2)/128;
//mPoints[i*4+2]=mRect.width()*(i+1)/(mBytes.length-1);
//mPoints[i*4+3]=mRect.height()/2
//+((byte)(mBytes[i+1]+128))*(mRect.height()/2)/128;
//}

//繪制頻譜
finalintbaseX=mRect.width()/mSpectrumNum;
finalintheight=mRect.height();

for(inti=0;i<mSpectrumNum;i++)
{
if(mBytes[i]<0)
{
mBytes[i]=127;
}

finalintxi=baseX*i+baseX/2;

mPoints[i*4]=xi;
mPoints[i*4+1]=height;

mPoints[i*4+2]=xi;
mPoints[i*4+3]=height-mBytes[i];
}

canvas.drawLines(mPoints,mForePaint);
}
}
}

熱點內容
小鳥雲如何去看客戶伺服器密碼 發布:2025-05-20 07:58:51 瀏覽:898
怎麼更改app的密碼 發布:2025-05-20 07:54:32 瀏覽:784
汽車配置物品怎麼處理 發布:2025-05-20 07:47:23 瀏覽:225
怎麼修改華為wifi密碼 發布:2025-05-20 07:45:12 瀏覽:41
php函數遞歸 發布:2025-05-20 07:39:36 瀏覽:781
登陸認證失敗請檢查伺服器地址 發布:2025-05-20 07:06:55 瀏覽:831
無限分類實現php 發布:2025-05-20 06:57:40 瀏覽:681
數據結構c語言版嚴蔚敏李冬梅 發布:2025-05-20 06:55:05 瀏覽:449
iphone快捷訪問 發布:2025-05-20 06:55:05 瀏覽:929
如何加密硬碟分區 發布:2025-05-20 06:52:29 瀏覽:363