前提・実現したいこと
https://qiita.com/c60evaporator/items/b8f8c83dd3630c0091cf#%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E3%81%94%E3%81%A8dataset%E3%81%AB%E9%81%A9%E7%94%A8%E3%81%99%E3%82%8Bui%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7
に習ってwavファイルのデータを波形に直したいと考えています。
以下のエラーが出て困っています。助けていただければ幸いです。
発生している問題・エラーメッセージ
①Unresolved reference: LineChartFormat ②Not enough information to infer type variable V ③Unresolved reference: LineDataSetFormat ④Unresolved reference: context ⑤Not enough information to infer type variable R
該当のソースコード
MainActivity
1 @RequiresApi(Build.VERSION_CODES.LOLLIPOP) 2 override fun onCreate(savedInstanceState: Bundle?) { 3 super.onCreate(savedInstanceState) 4 setContentView(R.layout.activity_main) 5 6 //ここで音源を配列wavDataになおす 7 8 byteArrayToInt(wavData) 9 var ampListArray = arrayListOf<Int>() 10 var floatListArray = arrayListOf<Float>() 11 12 //ampListArrayにwavDataを、floatListArrayに1から順番に数字を代入 13 14 val x = floatListArray//X軸データ 15 val y = ampListArray//Y軸データ 16 17 //Entryにデータ格納 18 var entryList = mutableListOf<Entry>()//1本目の線 19 for(i in x.indices){ 20 entryList.add( 21 Entry(x[i], y[i].toFloat()) 22 ) 23 } 24 25 val lineDataSets = mutableListOf<ILineDataSet>() 26 27 val lineDataSet = LineDataSet(entryList, "square") 28 29 lineDataSet.color = Color.BLUE 30 //リストに格納 31 lineDataSets.add(lineDataSet) 32 33 val lineData = LineData(lineDataSets) 34 val lineChart: LineChart = findViewById(R.id.lineChartExample) 35 lineChart.data = lineData 36 37 val xX = floatListArray 38 val yY = ampListArray 39 40 41 var lineChartFormat = LineChartFormat()//① 42 var lineDataSetFormat = mapOf(//② 43 "linear" to LineDataSetFormat()//③ 44 ) 45 46 //Entryにデータ格納(カテゴリ名のMap) 47 val allLinesEntries: MutableMap<String, MutableList<Entry>> = mutableMapOf( 48 "linear" to makeLineChartData(xX, yY) 49 ) 50 51 setupLineChart(allLinesEntries, findViewById(R.id.lineChartExample), lineChartFormat, lineDataSetFormat, context)//④ 52 53 lineChart.xAxis.apply { 54 isEnabled = true 55 textColor = Color.BLACK 56 } 57 //linechart更新 58 lineChart.invalidate() 59 60 61 } 62 private fun byteArrayToInt(byteArray: ByteArray): Int { 63 var result = 0 64 for (i in 0..3) { 65 result = result shl 8 66 result = result or (byteArray[i] and 0xFF.toByte()).toInt() 67 } 68 return result 69 } 70 71 companion object { 72 private const val TAG = "ClassName" 73 } 74 75}
LineChartMethods
1 2fun initializeLineChart(lineChart: LineChart){ 3 lineChart.apply { 4 clear() 5 background = null 6 marker = null 7 xAxis.valueFormatter = null 8 legend.textColor = Color.BLACK 9 description.textColor = Color.BLACK 10 xAxis.textColor = Color.BLACK 11 axisLeft.textColor = Color.BLACK 12 axisRight.textColor = Color.BLACK 13 } 14} 15 16fun makeLineChartData(x: List<Float>, y: ArrayList<Int>): MutableList<Entry> { 17 var entryList = mutableListOf<Entry>() 18 if(x.size != y.size) 19 { 20 throw IllegalArgumentException("size of x and y are not equal") 21 } 22 for(i in x.indices){ 23 entryList.add( 24 Entry(x[i], y[i].toFloat()) 25 ) 26 } 27 return entryList 28} 29 30fun makeDateLineChartData(x: List<Date>, y: List<Float>, timeAccuracy: Boolean): MutableList<Entry>{ 31 var entryList = mutableListOf<Entry>() 32 if(x.size != y.size) 33 { 34 throw IllegalArgumentException("size of x and y are not equal") 35 } 36 37 if(!timeAccuracy){ 38 for(i in x.indices){ 39 entryList.add( 40 Entry(i.toFloat(), y[i], x[i]) 41 ) 42 } 43 } 44 //最初と最後のラベルのみ表示するとき(精度重視) 45 else{ 46 //日付をシリアル値に変換して規格化 47 val xSerial = x.map{it.time.toFloat()}//シリアル値変換 48 val maxSerial = xSerial.max()!!//最大値 49 val minSerial = xSerial.min()!!//最小値 50 val size = x.size//データの要素数 51 val xFloat = xSerial.map { (it - minSerial) / (maxSerial - minSerial) * (size - 1) }//最小値が0、最大値がsize - 1となるよう規格化 52 //entryListに入力 53 for(i in x.indices){ 54 entryList.add( 55 Entry(xFloat[i], y[i], x[i]) 56 ) 57 } 58 } 59 return entryList 60} 61 62 63fun setupLineChart( 64 allLinesEntries: MutableMap<String, MutableList<Entry>>, 65 lineChart: LineChart, 66 lineChartFormat: LineChartFormat,//① 67 lineDataSetFormats: Map<String, LineDataSetFormat>,//③ 68 context: Context 69) { 70 //初期化 71 initializeLineChart(lineChart) 72 //背景輝度が0.5以下なら文字色を白に 73 val luminance = lineChartFormat.invertTextColor() 74 lineDataSetFormats.values.map { it.invertTextColor(luminance) }//⑤ 75 76 77 //LineDataSetのリストを作成 78 val lineDataSets = mutableListOf<ILineDataSet>() 79 for((k, v) in allLinesEntries){ 80 var lineDataSet: ILineDataSet = LineDataSet(v, k).apply{ 81 //DataSetフォーマット適用 82 formatLineDataSet(this, lineDataSetFormats[k]!!) 83 } 84 lineDataSets.add(lineDataSet) 85 } 86 87 //LineDataにLineDataSet格納 88 val lineData = LineData(lineDataSets) 89 //LineChartにLineDataを格納 90 lineChart.data = lineData 91 //グラフ全体フォーマットの適用 92 formatLineChart(lineChart, lineChartFormat, context) 93 94 95 //LineChart更新 96 lineChart.invalidate() 97} 98 99 100 101fun formatLineChart(lineChart: LineChart, lineChartFormat: LineChartFormat, context: Context){//① 102 //凡例 103 if(lineChartFormat.legendFormat != null){ 104 //凡例形状 105 lineChart.legend.form = lineChartFormat.legendFormat 106 //凡例文字色 107 if(lineChartFormat.legentTextColor != null) { 108 lineChart.legend.textColor = lineChartFormat.legentTextColor!! 109 } 110 //凡例文字サイズ 111 if(lineChartFormat.legendTextSize != null) { 112 lineChart.legend.textSize = lineChartFormat.legendTextSize!! 113 } 114 } 115 else lineChart.legend.isEnabled = false //凡例非表示のとき 116 //グラフ説明 117 if(lineChartFormat.description != null) { 118 lineChart.description.isEnabled = true 119 lineChart.description.text = lineChartFormat.description 120 //ここでグラフ説明の文字色、文字サイズ、縦横の微調整 121 122 } 123 //全体の背景色 124 if(lineChartFormat.bgColor != null) { 125 lineChart.setBackgroundColor(lineChartFormat.bgColor!!) 126 } 127 //タッチ動作 128 lineChart.setTouchEnabled(lineChartFormat.touch) 129 130 //X軸ラベルの設定 131 if(lineChartFormat.xAxisEnabled) { 132 lineChart.xAxis.isEnabled = true//X軸ラベル表示 133 //文字色 134 if(lineChartFormat.xAxisTextColor != null) { 135 lineChart.xAxis.textColor = lineChartFormat.xAxisTextColor!! 136 } 137 //文字サイズ 138 if(lineChartFormat.xAxisTextSize != null) { 139 lineChart.xAxis.textSize = lineChartFormat.xAxisTextSize!! 140 } 141 } 142 else lineChart.xAxis.isEnabled = false//X軸ラベル非表示のとき 143 144 // ここで左と右のY軸ラベルの設定 145 146 //ズーム設定 147 when(lineChartFormat.zoomDirection){ 148 null -> lineChart.setScaleEnabled(false) 149 "x" -> { 150 lineChart.isScaleXEnabled = true 151 lineChart.isScaleYEnabled = false 152 } 153 "y" -> { 154 lineChart.isScaleXEnabled = false 155 lineChart.isScaleYEnabled = true 156 } 157 "xy" -> { 158 lineChart.setScaleEnabled(true) 159 lineChart.setPinchZoom(lineChartFormat.zoomPinch) 160 } 161 } 162 163 //ツールチップの表示 164 if(lineChartFormat.toolTipDirection != null) { 165 val mv = SimpleMarkerView(context, R.layout.simple_marker_view) 166 167 mv.chartView = lineChart 168 lineChart.marker = mv 169 } 170} 171 172 173fun formatLineDataSet(lineDataSet: LineDataSet, lineDataSetFormat: LineDataSetFormat){//③ 174 //ここで値のフォーマット 175 176 //使用する軸 177 if(lineDataSetFormat.axisDependency != null) { 178 lineDataSet.axisDependency = lineDataSetFormat.axisDependency 179 } 180 181 //線の色 182 if(lineDataSetFormat.lineColor != null) lineDataSet.color = lineDataSetFormat.lineColor!! 183 //線の幅 184 if(lineDataSetFormat.lineWidth != null) lineDataSet.lineWidth = lineDataSetFormat.lineWidth!! 185 //フィッティング法 186 if(lineDataSetFormat.fittingMode != null) lineDataSet.mode = lineDataSetFormat.fittingMode!! 187 188 //ここにデータ点のフォーマット 189 190}
試したこと
元コードを見たりしたのですがLineDataSetlFormat、LineChartlFormatが見当たらなくて困っています。
あなたの回答
tips
プレビュー