2015-11-19 30 views
10

は、私はこのようなLineChartの中央に縦線を設定したいです日付フィールド)。また、矢印ボタンをクリックすることで、左または右にプログラムで移動できます。MPAndroidChartセットセンター縦線

現在、私は、ビューポートを設定し、このコードを中央に移動できるようにすることができます

LineData data = new LineData(xVals, dataSets); 
mChart.setScaleMinima((float) data.getXValCount()/7f, 1f); 
mChart.moveViewTo(0, 7, YAxis.AxisDependency.LEFT); 

し、結果を得る:私は描画などの縦線を設定するにはどうすればよい

enter image description here

を上記?

更新:リスナーの

、私はOnChartGestureListeneronChartTranslate(MotionEvent me, float dX, float dY)が役立つかもしれないと思います。私が必要とするのは、2点間の距離と現在のビューポートにある点の数を計算する方法です。誰もそれを知っていますか?

+0

'FrameLayout'を使って最初のイメージのような行を追加することができます。 – activesince93

+0

@ activesince93それを中心にする方法と、各ノードがこの方法でこの行にスクロールするときをどのように知っていますか? – R4j

答えて

6

よう 何かがあなたがチャートの中心のx、y座標を供給チャート上getEntryByTouchPointを使用してみましたか?

public Entry getEntryByTouchPoint(float x, float y)

は、多分それは手遅れだが、ここで私の答えであるチャート

+0

このメソッドを 'onChartTranslate'イベントと組み合わせて動作させました。しかし、最初と最後のエントリにスクロールしようとすると間違っています。これらのエントリは中心線に移動することはできませんが、getEntryByTouchPointはまだそれらを返します – R4j

+0

@ R4j私が考えることができる唯一のオプションは、最初の実数の前にエントリなしで "偽"または空の 'Entry'sまたはxValsを追加することですデータポイントと最後の後。例についてはこの記事をご覧ください:http://stackoverflow.com/questions/33619679/make-line-chart-with-values-and-dates/33619941#33619941 –

5

は、メソッドBarLineChartBaseクラス(折れ線グラフの親)で

protected void drawGridBackground(Canvas c) { 

を見てみましょう。その方法では、真ん中に線を描画するためのすべてのデータがあります。この

RectF rectF = mViewPortHandler.getContentRect(); 
float xMiddle = (rectF.right - rectF.left)/2; 
Paint p = new Paint(); 
p.setColor(Color.BLACK); 
c.drawLine(xMiddle, rectF.bottom, xMiddle, rectF.top, p); 
+0

ありがとうございます。この線は、上記の代わりにポイントチャートの下に描画されます。そして、大きな問題は、この垂直線上で点をスクロールするときにどのように聴くのかわかりません。提案はありますか? – R4j

+0

データの下に線を描画する必要がある場合は、XAxisRenderクラスのrenderGridLines(Canvas c)メソッドで行うことができます。上記のコードをメソッドの最後に追加するだけです。あなたの質問の他の部分(リスナーについて)に答えることができません。私が答えを見つけたら、私はあなたに書きます。 – Lanitka

1

の触れた位置に表示さEntryオブジェクトを返します。 チャート(iOS用MPAndroidChartsポート)を使用して、スウィフトにエンコードされたが、APIは同じ99%であります;)

let verticalPointEntry = ChartDataEntry(x: xValue, y: yValue) 

let dataSet = LineChartDataSet(values: [verticalPointEntry], label: "") 
dataSet.drawCirclesEnabled = false 
dataSet.drawValuesEnabled = false 
dataSet.setDrawHighlightIndicators(true) 
dataSet.drawHorizontalHighlightIndicatorEnabled = false 
dataSet.highlightColor = UIColor.white 
dataSet.highlightLineWidth = 1 

let highlightPoint = Highlight(x: xValue, y: yValue, dataSetIndex: datasetIndex) 
self.highlightValues([highlightPoint]) 

// "yourNormalDataSet" is your regular dataSet in which you want to display vertical line over it 
let chartData = LineChartData(dataSets: [yourNormalDataSet, dataSet]) 
self.data = chartData 
self.data?.notifiyDataChanged() 
self.notifyDataSetChanged 

これはあなたのはxValue変数によって定義された点を超えるvercitalラインが表示されます。

希望すると助かります!

関連する問題