問題
MPAndroidChartを用いてスペクトルアナライザを作成しているのですが、録音開始後も表示されません。
しかし、何も表示されていないグラフをタッチするとグラフが表示されます。
これを画面タッチせずに表示させたいのですが、どのようにすれば良いでしょうか。
ソースコード
MPAndroidChartに関係する部分のみ抜き出しています。録音等は正常に作動していることを確認済みのため割愛します。
java
1//初期化 2initChart(); 3 4myThread = new Thread(new Runnable() { 5 @Override 6 public void run() { 7 byte[] recordData = new byte[RECORD_BUFFER_SIZE]; 8 while (isRecording) { 9 setData(decibelFrequencySpectrum); 10 } 11 } 12}); 13myThread.start();
java
1public void initChart() { 2 3 lineChart.setTouchEnabled(true); 4 lineChart.setDragEnabled(false); 5 6 // Grid背景色 7 lineChart.setDrawGridBackground(true); 8 9 // no description text 10 lineChart.getDescription().setEnabled(true); 11 12 lineChart.setBackgroundColor(Color.LTGRAY); 13 14 LineData data = new LineData(); 15 data.setValueTextColor(Color.BLACK); 16 17 // add empty data 18 lineChart.setData(data); 19 20 // Grid縦軸を破線 21 XAxis xAxis = lineChart.getXAxis(); 22 xAxis.setAxisMaximum(2048); 23 xAxis.setAxisMinimum(0); 24 xAxis.enableGridDashedLine(10f, 10f, 0f); 25 xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); 26 27 YAxis leftAxis = lineChart.getAxisLeft(); 28 // Y軸最大最小設定 29 leftAxis.setAxisMaximum(0f); 30 leftAxis.setAxisMinimum(-150f); 31 // Grid横軸を破線 32 leftAxis.enableGridDashedLine(10f, 10f, 0f); 33 leftAxis.setDrawZeroLine(true); 34 // 右側の目盛り 35 lineChart.getAxisRight().setEnabled(false); 36} 37 38public void setData(double[] data) { 39 40 ArrayList<Entry> values = new ArrayList<>(); 41 42 for (int i = 0; i < data.length; i++) { 43 values.add(new Entry(i, (int)data[i], null, null)); 44 } 45 46 LineDataSet set1; 47 48 if (lineChart.getData() != null && 49 lineChart.getData().getDataSetCount() > 0) { 50 51 set1 = (LineDataSet) lineChart.getData().getDataSetByIndex(0); 52 set1.setValues(values); 53 lineChart.getData().notifyDataChanged(); 54 lineChart.notifyDataSetChanged(); 55 } else { 56 // create a dataset and give it a type 57 set1 = new LineDataSet(values, "Spectral"); 58 set1.setDrawIcons(false); 59 set1.setColor(Color.rgb(0, 0, 240)); 60 set1. setDrawCircles(false); 61 set1.setLineWidth(0.5f); 62 set1.setValueTextSize(0f); 63 set1.setDrawFilled(false); 64 set1.setFormLineWidth(1f); 65 set1.setFormLineDashEffect(new DashPathEffect(new float[]{10f, 5f}, 0f)); 66 set1.setFormSize(15.f); 67 set1.setDrawValues(true); 68 69 ArrayList<ILineDataSet> dataSets = new ArrayList<>(); 70 dataSets.add(set1); // add the datasets 71 72 // create a data object with the datasets 73 LineData lineData = new LineData(dataSets); 74 75 // set data 76 lineChart.setData(lineData); 77 } 78}
アプリ画面
アプリ起動時の画面です。アプリ名の下にあるSwitchをタッチすると録音と描画が開始されるはずです。
Switchをタッチした後の画面です。録音は開始されましたがグラフにはなにも描画されません。
グラフをタッチ(スライド)するとその瞬間の録音データが描画されます。指を離すとまた描画が更新されなくなります。
これをタッチなしで描画・更新されるようにしたいです。
補足
MPAndroidChartはv3.0.3です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/29 05:59