Skip to content

Commit f3f1dd6

Browse files
committed
提供横向滚动
1 parent d678724 commit f3f1dd6

File tree

4 files changed

+41
-9
lines changed

4 files changed

+41
-9
lines changed

app/src/main/java/com/bin/david/smartchart/LineChartActivity.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,18 +60,30 @@ protected void onCreate(Bundle savedInstanceState) {
6060
chartYDataList.add("Paris");
6161
chartYDataList.add("Hong Kong");
6262
chartYDataList.add("Singapore");
63+
chartYDataList.add("Tokyo");
64+
chartYDataList.add("Paris");
65+
chartYDataList.add("Hong Kong");
66+
chartYDataList.add("Singapore");
6367
List<LineData> ColumnDatas = new ArrayList<>();
6468
ArrayList<Double> tempList1 = new ArrayList<>();
6569
tempList1.add(26d);
6670
tempList1.add(-35d);
6771
tempList1.add(-40d);
6872
tempList1.add(10d);
73+
tempList1.add(26d);
74+
tempList1.add(-35d);
75+
tempList1.add(-40d);
76+
tempList1.add(10d);
6977
final LineData columnData1 = new LineData("Temperature", "℃", IAxis.AxisDirection.RIGHT, getResources().getColor(R.color.arc3), tempList1);
7078
ArrayList<Double> humidityList = new ArrayList<>();
7179
humidityList.add(60d);
7280
humidityList.add(50d);
7381
humidityList.add(30d);
7482
humidityList.add(65d);
83+
humidityList.add(60d);
84+
humidityList.add(50d);
85+
humidityList.add(30d);
86+
humidityList.add(65d);
7587
LineData columnData2 = new LineData("Humidity", "RH%", getResources().getColor(R.color.arc2), humidityList);
7688
ColumnDatas.add(columnData1);
7789
ColumnDatas.add(columnData2);
@@ -137,6 +149,7 @@ public String[] format(LineData lineData, int position) {
137149
lineChart.getProvider().setTip(tip);
138150
//设置显示标题
139151
lineChart.setShowChartName(true);
152+
lineChart.getMatrixHelper().setWidthMultiple(3);
140153
//设置标题方向
141154
lineChart.getChartTitle().setDirection(IComponent.TOP);
142155
//设置标题比例

app/src/main/res/layout/activity_line.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<com.daivd.chart.core.LineChart
1111

1212
android:id="@+id/lineChart"
13-
android:layout_width="2000dp"
13+
android:layout_width="match_parent"
1414
android:background="#f4f4f4"
1515
android:layout_height="400dp"/>
1616

chart/src/main/java/com/daivd/chart/core/base/BaseChart.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,8 @@ public ChartData<C> getChartData() {
197197
return chartData;
198198
}
199199

200+
201+
200202
/**
201203
* 设置图表数据源
202204
*/

chart/src/main/java/com/daivd/chart/matrix/MatrixHelper.java

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.content.Context;
44
import android.graphics.Rect;
5+
import android.util.Log;
56
import android.view.GestureDetector;
67
import android.view.MotionEvent;
78
import android.view.ScaleGestureDetector;
@@ -33,6 +34,7 @@ public class MatrixHelper extends Observable<ChartGestureObserver> implements IT
3334
private Rect zoomRect;
3435
private float mDownX, mDownY;
3536
private int pointMode; //屏幕的手指点个数
37+
private float widthMultiple =1;
3638

3739

3840
public MatrixHelper(Context context) {
@@ -249,27 +251,42 @@ public Rect getZoomProviderRect(Rect providerRect) {
249251
Rect scaleRect = new Rect();
250252
int oldw = providerRect.width();
251253
int oldh = providerRect.height();
252-
int newWidth = (int) (oldw * zoom);
254+
int multipleWidth = (int) (oldw *widthMultiple);
255+
256+
int newWidth = (int) (multipleWidth * zoom);
253257
int newHeight = (int) (oldh * zoom);
254-
int maxTranslateX = Math.abs(newWidth - oldw) / 2;
258+
int offsetX = (int) (oldw*(zoom-1))/2;
259+
int offsetY =(int) (oldh*(zoom-1))/2;
260+
int maxTranslateLeft = (int)Math.abs(oldw*(zoom-1) / 2);
261+
int maxTranslateRight = newWidth - oldw - offsetX;
255262
int maxTranslateY = Math.abs(newHeight - oldh) / 2;
256-
if (Math.abs(translateX) > maxTranslateX) {
257-
translateX = translateX > 0 ? maxTranslateX : -maxTranslateX;
263+
if(translateX >maxTranslateRight){
264+
translateX = maxTranslateRight;
265+
}
266+
if(translateX < -maxTranslateLeft){
267+
translateX = -maxTranslateLeft;
258268
}
259269
if (Math.abs(translateY) > maxTranslateY) {
260270
translateY = translateY > 0 ? maxTranslateY : -maxTranslateY;
261271
}
262-
int offsetX = (newWidth - oldw) / 2;
263-
int offsetY = (newHeight - oldh) / 2;
272+
264273
scaleRect.left = providerRect.left - offsetX - translateX;
265-
scaleRect.right = providerRect.right + offsetX - translateX;
274+
scaleRect.right=scaleRect.left+newWidth;
266275
scaleRect.top = providerRect.top - offsetY - translateY;
267-
scaleRect.bottom = providerRect.bottom + offsetY - translateY;
276+
scaleRect.bottom = scaleRect.top+newHeight;
268277
zoomRect = scaleRect;
269278
return scaleRect;
270279
}
271280

272281

282+
public float getWidthMultiple() {
283+
return widthMultiple;
284+
}
285+
286+
public void setWidthMultiple(int widthMultiple) {
287+
this.widthMultiple = widthMultiple;
288+
}
289+
273290
public boolean isCanZoom() {
274291
zoom = 1f;
275292
return isCanZoom;

0 commit comments

Comments
 (0)