{"id":301,"date":"2013-11-26T08:16:56","date_gmt":"2013-11-26T00:16:56","guid":{"rendered":"http:\/\/www.menglanglang.cn\/?p=301"},"modified":"2015-12-22T18:34:24","modified_gmt":"2015-12-22T10:34:24","slug":"android%e6%92%ad%e6%94%be%e9%9f%b3%e4%b9%90%e6%97%b6%e8%b7%b3%e5%8a%a8%e7%9a%84%e5%b1%8f%e8%b0%b1demo","status":"publish","type":"post","link":"http:\/\/www.menglanglang.cn\/?p=301","title":{"rendered":"Android\u64ad\u653e\u97f3\u4e50\u65f6\u8df3\u52a8\u7684\u5c4f\u8c31demo"},"content":{"rendered":"<p><span style=\"font-size: medium;\">Android\u5b9e\u73b0\u64ad\u653e\u97f3\u9891\u65f6\u7684\u8df3\u52a8\u9891\u8c31\uff0c\u5e76\u5b9e\u73b0\u53ef\u4ee5\u8c03\u8282\u7684\u5747\u8861\u5668\u3002<\/span><\/p>\n<p><strong>Main.java<\/strong><\/p>\n<div class=\"dp-highlighter\">\n<div class=\"bar\"><\/div>\n<ol class=\"dp-j\" start=\"1\">\n<li class=\"alt\"><span class=\"keyword\">package<\/span>\u00a0com.wjq.audiofx;<\/li>\n<li><\/li>\n<li class=\"alt\"><span class=\"keyword\">import<\/span>\u00a0android.app.Activity;<\/li>\n<li><span class=\"keyword\">import<\/span>\u00a0android.media.AudioManager;<\/li>\n<li class=\"alt\"><span class=\"keyword\">import<\/span>\u00a0android.media.MediaPlayer;<\/li>\n<li><span class=\"keyword\">import<\/span>\u00a0android.media.audiofx.Equalizer;<\/li>\n<li class=\"alt\"><span class=\"keyword\">import<\/span>\u00a0android.media.audiofx.Visualizer;<\/li>\n<li><span class=\"keyword\">import<\/span>\u00a0android.os.Bundle;<\/li>\n<li class=\"alt\"><span class=\"keyword\">import<\/span>\u00a0android.util.Log;<\/li>\n<li><span class=\"keyword\">import<\/span>\u00a0android.view.Gravity;<\/li>\n<li class=\"alt\"><span class=\"keyword\">import<\/span>\u00a0android.view.ViewGroup;<\/li>\n<li><span class=\"keyword\">import<\/span>\u00a0android.widget.LinearLayout;<\/li>\n<li class=\"alt\"><span class=\"keyword\">import<\/span>\u00a0android.widget.SeekBar;<\/li>\n<li><span class=\"keyword\">import<\/span>\u00a0android.widget.TextView;<\/li>\n<li class=\"alt\"><\/li>\n<li><span class=\"keyword\">public<\/span>\u00a0<span class=\"keyword\">class<\/span>\u00a0Main\u00a0<span class=\"keyword\">extends<\/span>\u00a0Activity\u00a0{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">private<\/span>\u00a0<span class=\"keyword\">static<\/span>\u00a0<span class=\"keyword\">final<\/span>\u00a0String\u00a0TAG\u00a0=\u00a0<span class=\"string\">\"AudioFxDemo\"<\/span>;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">private<\/span>\u00a0<span class=\"keyword\">static<\/span>\u00a0<span class=\"keyword\">final<\/span>\u00a0<span class=\"keyword\">float<\/span>\u00a0VISUALIZER_HEIGHT_DIP\u00a0=\u00a050f;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">private<\/span>\u00a0MediaPlayer\u00a0mMediaPlayer;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">private<\/span>\u00a0Visualizer\u00a0mVisualizer;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">private<\/span>\u00a0Equalizer\u00a0mEqualizer;<span class=\"comment\">\/\/\u5747\u6a2a\u5668<\/span><\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">private<\/span>\u00a0LinearLayout\u00a0mLinearLayout;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0VisualizerView\u00a0mVisualizerView;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">private<\/span>\u00a0TextView\u00a0mStatusTextView;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"annotation\">@Override<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">public<\/span>\u00a0<span class=\"keyword\">void<\/span>\u00a0onCreate(Bundle\u00a0icicle)\u00a0{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">super<\/span>.onCreate(icicle);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0setVolumeControlStream(AudioManager.STREAM_MUSIC);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mStatusTextView\u00a0=\u00a0<span class=\"keyword\">new<\/span>\u00a0TextView(<span class=\"keyword\">this<\/span>);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mLinearLayout\u00a0=\u00a0<span class=\"keyword\">new<\/span>\u00a0LinearLayout(<span class=\"keyword\">this<\/span>);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mLinearLayout.setOrientation(LinearLayout.VERTICAL);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mLinearLayout.addView(mStatusTextView);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0setContentView(mLinearLayout);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/\/\u00a0Create\u00a0the\u00a0MediaPlayer<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mMediaPlayer\u00a0=\u00a0MediaPlayer.create(<span class=\"keyword\">this<\/span>,\u00a0R.raw.test_cbr);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">if<\/span>(\u00a0<span class=\"keyword\">null<\/span>\u00a0==\u00a0mMediaPlayer\u00a0)<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">return<\/span>\u00a0;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Log.d(TAG,\u00a0<span class=\"string\">\"MediaPlayer\u00a0audio\u00a0session\u00a0ID:\u00a0\"<\/span>\u00a0+\u00a0mMediaPlayer.getAudioSessionId());<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0setupVisualizerFxAndUI();<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0setupEqualizerFxAndUI();<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/\/\u00a0Make\u00a0sure\u00a0the\u00a0visualizer\u00a0is\u00a0enabled\u00a0only\u00a0when\u00a0you\u00a0actually\u00a0want\u00a0to\u00a0receive\u00a0data,\u00a0and<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/\/\u00a0when\u00a0it\u00a0makes\u00a0sense\u00a0to\u00a0receive\u00a0data.<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mVisualizer.setEnabled(<span class=\"keyword\">true<\/span>);<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/\/\u00a0When\u00a0the\u00a0stream\u00a0ends,\u00a0we\u00a0don't\u00a0need\u00a0to\u00a0collect\u00a0any\u00a0more\u00a0data.\u00a0We\u00a0don't\u00a0do\u00a0this\u00a0in<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/\/\u00a0setupVisualizerFxAndUI\u00a0because\u00a0we\u00a0likely\u00a0want\u00a0to\u00a0have\u00a0more,\u00a0non-Visualizer\u00a0related\u00a0code<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/\/\u00a0in\u00a0this\u00a0callback.<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mMediaPlayer.setOnCompletionListener(<span class=\"keyword\">new<\/span>\u00a0MediaPlayer.OnCompletionListener()\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">public<\/span>\u00a0<span class=\"keyword\">void<\/span>\u00a0onCompletion(MediaPlayer\u00a0mediaPlayer)\u00a0{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mVisualizer.setEnabled(<span class=\"keyword\">false<\/span>);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mMediaPlayer.start();<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mStatusTextView.setText(<span class=\"string\">\"\u64ad\u653e\u97f3\u9891...\"<\/span>);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/**<\/span><\/li>\n<li><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\u00a0\u901a\u8fc7mMediaPlayer\u8fd4\u56de\u7684AudioSessionId\u521b\u5efa\u4e00\u4e2a\u4f18\u5148\u7ea7\u4e3a0\u5747\u8861\u5668\u5bf9\u8c61,\u5e76\u4e14\u901a\u8fc7\u9891\u8c31\u751f\u6210\u76f8\u5e94\u7684UI\u548c\u5bf9\u5e94\u7684\u4e8b\u4ef6<\/span><\/li>\n<li class=\"alt\"><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">private<\/span>\u00a0<span class=\"keyword\">void<\/span>\u00a0setupEqualizerFxAndUI()\u00a0{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mEqualizer\u00a0=\u00a0<span class=\"keyword\">new<\/span>\u00a0Equalizer(<span class=\"number\">0<\/span>,\u00a0mMediaPlayer.getAudioSessionId());<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/\/\u00a0\u542f\u7528\u5747\u8861\u5668<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mEqualizer.setEnabled(<span class=\"keyword\">true<\/span>);<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0TextView\u00a0eqTextView\u00a0=\u00a0<span class=\"keyword\">new<\/span>\u00a0TextView(<span class=\"keyword\">this<\/span>);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0eqTextView.setText(<span class=\"string\">\"\u5747\u6a2a\u5668:\"<\/span>);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mLinearLayout.addView(eqTextView);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/\/\u00a0\u901a\u8fc7\u5747\u8861\u5668\u5f97\u5230\u5176\u652f\u6301\u7684\u9891\u8c31\u5f15\u64ce<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">short<\/span>\u00a0bands\u00a0=\u00a0mEqualizer.getNumberOfBands();<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/\/\u00a0getBandLevelRange\u662f\u4e00\u4e2a\u6570\u7ec4\uff0c\u8fd4\u56de\u4e00\u7ec4\u9891\u8c31\u7b49\u7ea7\u6570\u7ec4\uff0c\u8fd4\u56de\u4e00\u7ec4\u9891\u8c31\u7b49\u7ea7\u6570\u7ec4<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/\/\u00a0\u7b2c\u4e00\u4e2a\u4e0b\u6807\u4e3a\u6700\u4f4e\u7684\u9650\u5ea6\u8303\u56f4\uff0c\u7b2c\u4e8c\u4e2a\u4e0b\u6807\u4e3a\u6700\u9ad8\u7684\u9650\u5ea6\u8303\u56f4<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/\/\u00a0\u4f9d\u6b21\u53d6\u51fa<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">final<\/span>\u00a0<span class=\"keyword\">short<\/span>\u00a0minEQLevel\u00a0=\u00a0mEqualizer.getBandLevelRange()[<span class=\"number\">0<\/span>];<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">final<\/span>\u00a0<span class=\"keyword\">short<\/span>\u00a0maxEQLevel\u00a0=\u00a0mEqualizer.getBandLevelRange()[<span class=\"number\">1<\/span>];<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">for<\/span>\u00a0(<span class=\"keyword\">short<\/span>\u00a0i\u00a0=\u00a0<span class=\"number\">0<\/span>;\u00a0i\u00a0&lt;\u00a0bands;\u00a0i++)\u00a0{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">final<\/span>\u00a0<span class=\"keyword\">short<\/span>\u00a0band\u00a0=\u00a0i;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0TextView\u00a0freqTextView\u00a0=\u00a0<span class=\"keyword\">new<\/span>\u00a0TextView(<span class=\"keyword\">this<\/span>);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0freqTextView.setLayoutParams(<span class=\"keyword\">new<\/span>\u00a0ViewGroup.LayoutParams(<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ViewGroup.LayoutParams.FILL_PARENT,<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ViewGroup.LayoutParams.WRAP_CONTENT));<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0freqTextView.setGravity(Gravity.CENTER_HORIZONTAL);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0freqTextView.setText((mEqualizer.getCenterFreq(band)\u00a0\/\u00a0<span class=\"number\">1000<\/span>)\u00a0+\u00a0<span class=\"string\">\"\u00a0Hz\"<\/span>);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mLinearLayout.addView(freqTextView);<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0LinearLayout\u00a0row\u00a0=\u00a0<span class=\"keyword\">new<\/span>\u00a0LinearLayout(<span class=\"keyword\">this<\/span>);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0row.setOrientation(LinearLayout.HORIZONTAL);<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0TextView\u00a0minDbTextView\u00a0=\u00a0<span class=\"keyword\">new<\/span>\u00a0TextView(<span class=\"keyword\">this<\/span>);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0minDbTextView.setLayoutParams(<span class=\"keyword\">new<\/span>\u00a0ViewGroup.LayoutParams(<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ViewGroup.LayoutParams.WRAP_CONTENT,<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ViewGroup.LayoutParams.WRAP_CONTENT));<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0minDbTextView.setText((minEQLevel\u00a0\/\u00a0<span class=\"number\">100<\/span>)\u00a0+\u00a0<span class=\"string\">\"\u00a0dB\"<\/span>);<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0TextView\u00a0maxDbTextView\u00a0=\u00a0<span class=\"keyword\">new<\/span>\u00a0TextView(<span class=\"keyword\">this<\/span>);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0maxDbTextView.setLayoutParams(<span class=\"keyword\">new<\/span>\u00a0ViewGroup.LayoutParams(<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ViewGroup.LayoutParams.WRAP_CONTENT,<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ViewGroup.LayoutParams.WRAP_CONTENT));<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0maxDbTextView.setText((maxEQLevel\u00a0\/\u00a0<span class=\"number\">100<\/span>)\u00a0+\u00a0<span class=\"string\">\"\u00a0dB\"<\/span>);<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0LinearLayout.LayoutParams\u00a0layoutParams\u00a0=\u00a0<span class=\"keyword\">new<\/span>\u00a0LinearLayout.LayoutParams(<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ViewGroup.LayoutParams.FILL_PARENT,<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ViewGroup.LayoutParams.WRAP_CONTENT);<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0layoutParams.weight\u00a0=\u00a0<span class=\"number\">1<\/span>;<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0SeekBar\u00a0bar\u00a0=\u00a0<span class=\"keyword\">new<\/span>\u00a0SeekBar(<span class=\"keyword\">this<\/span>);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0bar.setLayoutParams(layoutParams);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0bar.setMax(maxEQLevel\u00a0-\u00a0minEQLevel);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0bar.setProgress(mEqualizer.getBandLevel(band));<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0bar.setOnSeekBarChangeListener(<span class=\"keyword\">new<\/span>\u00a0SeekBar.OnSeekBarChangeListener()\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">public<\/span>\u00a0<span class=\"keyword\">void<\/span>\u00a0onStopTrackingTouch(SeekBar\u00a0seekBar)\u00a0{}<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">public<\/span>\u00a0<span class=\"keyword\">void<\/span>\u00a0onStartTrackingTouch(SeekBar\u00a0seekBar)\u00a0{}<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">public<\/span>\u00a0<span class=\"keyword\">void<\/span>\u00a0onProgressChanged(SeekBar\u00a0seekBar,\u00a0<span class=\"keyword\">int<\/span>\u00a0progress,<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">boolean<\/span>\u00a0fromUser)\u00a0{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mEqualizer.setBandLevel(band,\u00a0(<span class=\"keyword\">short<\/span>)\u00a0(progress\u00a0+\u00a0minEQLevel));<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0row.addView(minDbTextView);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0row.addView(bar);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0row.addView(maxDbTextView);<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mLinearLayout.addView(row);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/**<\/span><\/li>\n<li class=\"alt\"><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\u00a0\u751f\u6210\u4e00\u4e2aVisualizerView\u5bf9\u8c61\uff0c\u4f7f\u97f3\u9891\u9891\u8c31\u7684\u6ce2\u6bb5\u80fd\u591f\u53cd\u6620\u5230\u00a0VisualizerView\u4e0a<\/span><\/li>\n<li><span class=\"comment\">\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">private<\/span>\u00a0<span class=\"keyword\">void<\/span>\u00a0setupVisualizerFxAndUI()\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mVisualizerView\u00a0=\u00a0<span class=\"keyword\">new<\/span>\u00a0VisualizerView(<span class=\"keyword\">this<\/span>);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mVisualizerView.setLayoutParams(<span class=\"keyword\">new<\/span>\u00a0ViewGroup.LayoutParams(<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ViewGroup.LayoutParams.FILL_PARENT,<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0(<span class=\"keyword\">int<\/span>)(VISUALIZER_HEIGHT_DIP\u00a0*\u00a0getResources().getDisplayMetrics().density)));<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mLinearLayout.addView(mVisualizerView);<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">int<\/span>\u00a0sessId\u00a0=\u00a0mMediaPlayer.getAudioSessionId()\u00a0;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mVisualizer\u00a0=\u00a0<span class=\"keyword\">new<\/span>\u00a0Visualizer(sessId);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/\/\u00a0\u53c2\u6570\u5fc5\u987b\u662f2\u7684\u4f4d\u6570<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[<span class=\"number\">1<\/span>]);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/\/\u00a0\u8bbe\u7f6e\u5141\u8bb8\u6ce2\u5f62\u8868\u793a\uff0c\u5e76\u4e14\u6355\u83b7\u5b83<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mVisualizer.setDataCaptureListener(<span class=\"keyword\">new<\/span>\u00a0Visualizer.OnDataCaptureListener()\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">public<\/span>\u00a0<span class=\"keyword\">void<\/span>\u00a0onWaveFormDataCapture(Visualizer\u00a0visualizer,\u00a0<span class=\"keyword\">byte<\/span>[]\u00a0bytes,<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">int<\/span>\u00a0samplingRate)\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mVisualizerView.updateVisualizer(bytes);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">public<\/span>\u00a0<span class=\"keyword\">void<\/span>\u00a0onFftDataCapture(Visualizer\u00a0visualizer,\u00a0<span class=\"keyword\">byte<\/span>[]\u00a0bytes,\u00a0<span class=\"keyword\">int<\/span>\u00a0samplingRate)\u00a0{}<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\u00a0Visualizer.getMaxCaptureRate()\u00a0\/\u00a0<span class=\"number\">2<\/span>,\u00a0<span class=\"keyword\">true<\/span>,\u00a0<span class=\"keyword\">false<\/span>);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"annotation\">@Override<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">protected<\/span>\u00a0<span class=\"keyword\">void<\/span>\u00a0onPause()\u00a0{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">super<\/span>.onPause();<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">if<\/span>\u00a0(isFinishing()\u00a0&amp;&amp;\u00a0mMediaPlayer\u00a0!=\u00a0<span class=\"keyword\">null<\/span>)\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mVisualizer.release();<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mEqualizer.release();<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mMediaPlayer.release();<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mMediaPlayer\u00a0=\u00a0<span class=\"keyword\">null<\/span>;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li>}<\/li>\n<\/ol>\n<\/div>\n<p>&nbsp;<\/p>\n<p><strong>VisualizerView.java<\/strong><\/p>\n<div class=\"dp-highlighter\">\n<div class=\"bar\"><\/div>\n<ol class=\"dp-j\" start=\"1\">\n<li class=\"alt\"><span class=\"keyword\">package<\/span>\u00a0com.wjq.audiofx;<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0<span class=\"keyword\">import<\/span>\u00a0android.content.Context;<\/li>\n<li>\u00a0<span class=\"keyword\">import<\/span>\u00a0android.graphics.Canvas;<\/li>\n<li class=\"alt\">\u00a0<span class=\"keyword\">import<\/span>\u00a0android.graphics.Color;<\/li>\n<li>\u00a0<span class=\"keyword\">import<\/span>\u00a0android.graphics.Paint;<\/li>\n<li class=\"alt\">\u00a0<span class=\"keyword\">import<\/span>\u00a0android.graphics.Rect;<\/li>\n<li>\u00a0<span class=\"keyword\">import<\/span>\u00a0android.view.View;<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0<span class=\"keyword\">public<\/span>\u00a0<span class=\"keyword\">class<\/span>\u00a0VisualizerView\u00a0<span class=\"keyword\">extends<\/span>\u00a0View\u00a0{<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">private<\/span>\u00a0<span class=\"keyword\">byte<\/span>[]\u00a0mBytes;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">private<\/span>\u00a0<span class=\"keyword\">float<\/span>[]\u00a0mPoints;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/\/\u77e9\u5f62\u533a\u57df<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">private<\/span>\u00a0Rect\u00a0mRect\u00a0=\u00a0<span class=\"keyword\">new<\/span>\u00a0Rect();<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/\/\u00a0\u753b\u7b14<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">private<\/span>\u00a0Paint\u00a0mForePaint\u00a0=\u00a0<span class=\"keyword\">new<\/span>\u00a0Paint();<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"comment\">\/\/\u00a0\u521d\u59cb\u5316\u753b\u7b14<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">private<\/span>\u00a0<span class=\"keyword\">void<\/span>\u00a0init()\u00a0{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mBytes\u00a0=\u00a0<span class=\"keyword\">null<\/span>;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mForePaint.setStrokeWidth(1f);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mForePaint.setAntiAlias(<span class=\"keyword\">true<\/span>);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mForePaint.setColor(Color.GREEN);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">public<\/span>\u00a0VisualizerView(Context\u00a0context)\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">super<\/span>(context);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0init();<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">public<\/span>\u00a0<span class=\"keyword\">void<\/span>\u00a0updateVisualizer(<span class=\"keyword\">byte<\/span>[]\u00a0bytes)\u00a0{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mBytes\u00a0=\u00a0bytes;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0invalidate();<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"annotation\">@Override<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">protected<\/span>\u00a0<span class=\"keyword\">void<\/span>\u00a0onDraw(Canvas\u00a0canvas)\u00a0{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">super<\/span>.onDraw(canvas);<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">if<\/span>\u00a0(mBytes\u00a0==\u00a0<span class=\"keyword\">null<\/span>)\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">return<\/span>;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">if<\/span>\u00a0(mPoints\u00a0==\u00a0<span class=\"keyword\">null<\/span>\u00a0||\u00a0mPoints.length\u00a0&lt;\u00a0mBytes.length\u00a0*\u00a0<span class=\"number\">4<\/span>)\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mPoints\u00a0=\u00a0<span class=\"keyword\">new<\/span>\u00a0<span class=\"keyword\">float<\/span>[mBytes.length\u00a0*\u00a0<span class=\"number\">4<\/span>];<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mRect.set(<span class=\"number\">0<\/span>,\u00a0<span class=\"number\">0<\/span>,\u00a0getWidth(),\u00a0getHeight());<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">for<\/span>\u00a0(<span class=\"keyword\">int<\/span>\u00a0i\u00a0=\u00a0<span class=\"number\">0<\/span>;\u00a0i\u00a0&lt;\u00a0mBytes.length\u00a0-\u00a0<span class=\"number\">1<\/span>;\u00a0i++)\u00a0{<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mPoints[i\u00a0*\u00a0<span class=\"number\">4<\/span>]\u00a0=\u00a0mRect.width()\u00a0*\u00a0i\u00a0\/\u00a0(mBytes.length\u00a0-\u00a0<span class=\"number\">1<\/span>);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mPoints[i\u00a0*\u00a0<span class=\"number\">4<\/span>\u00a0+\u00a0<span class=\"number\">1<\/span>]\u00a0=\u00a0mRect.height()\u00a0\/\u00a0<span class=\"number\">2<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0+\u00a0((<span class=\"keyword\">byte<\/span>)\u00a0(mBytes[i]\u00a0+\u00a0<span class=\"number\">128<\/span>))\u00a0*\u00a0(mRect.height()\u00a0\/\u00a0<span class=\"number\">2<\/span>)\u00a0\/\u00a0<span class=\"number\">128<\/span>;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mPoints[i\u00a0*\u00a0<span class=\"number\">4<\/span>\u00a0+\u00a0<span class=\"number\">2<\/span>]\u00a0=\u00a0mRect.width()\u00a0*\u00a0(i\u00a0+\u00a0<span class=\"number\">1<\/span>)\u00a0\/\u00a0(mBytes.length\u00a0-\u00a0<span class=\"number\">1<\/span>);<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mPoints[i\u00a0*\u00a0<span class=\"number\">4<\/span>\u00a0+\u00a0<span class=\"number\">3<\/span>]\u00a0=\u00a0mRect.height()\u00a0\/\u00a0<span class=\"number\">2<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0+\u00a0((<span class=\"keyword\">byte<\/span>)\u00a0(mBytes[i\u00a0+\u00a0<span class=\"number\">1<\/span>]\u00a0+\u00a0<span class=\"number\">128<\/span>))\u00a0*\u00a0(mRect.height()\u00a0\/\u00a0<span class=\"number\">2<\/span>)\u00a0\/\u00a0<span class=\"number\">128<\/span>;<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li class=\"alt\"><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0canvas.drawLines(mPoints,\u00a0mForePaint);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/li>\n<li><\/li>\n<li class=\"alt\">\u00a0}<\/li>\n<\/ol>\n<\/div>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Android\u5b9e\u73b0\u64ad\u653e\u97f3\u9891\u65f6\u7684\u8df3\u52a8\u9891\u8c31\uff0c\u5e76\u5b9e\u73b0\u53ef\u4ee5\u8c03\u8282\u7684\u5747\u8861\u5668\u3002 Main.java package\u00a0com. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[108],"tags":[599,109,111],"class_list":["post-301","post","type-post","status-publish","format-standard","hentry","category-android","tag-android","tag-demo","tag-111"],"_links":{"self":[{"href":"http:\/\/www.menglanglang.cn\/index.php?rest_route=\/wp\/v2\/posts\/301","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.menglanglang.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.menglanglang.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.menglanglang.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.menglanglang.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=301"}],"version-history":[{"count":0,"href":"http:\/\/www.menglanglang.cn\/index.php?rest_route=\/wp\/v2\/posts\/301\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.menglanglang.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=301"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.menglanglang.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=301"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.menglanglang.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=301"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}