3 import org.afree.chart.AFreeChart;
\r
4 import org.afree.graphics.geom.RectShape;
\r
6 import android.content.Context;
\r
7 import android.graphics.Canvas;
\r
8 import android.util.AttributeSet;
\r
9 import android.view.MotionEvent;
\r
10 import android.view.View;
\r
12 public class HistoryView extends View {
\r
13 private AFreeChart chart;
\r
14 private int tx = -1;
\r
15 private int ty = -1;
\r
16 private int rr = -1;
\r
17 private static float dw = 1;
\r
18 private HistoryActivity activity;
\r
20 public HistoryView(Context context, AttributeSet attrs) {
\r
21 super(context, attrs);
\r
24 public void setHistoryActivity(HistoryActivity activity){
\r
25 this.activity = activity;
\r
29 protected void onDraw(Canvas canvas) {
\r
30 super.onDraw(canvas);
\r
32 int width = this.getWidth();
\r
33 int height = this.getHeight();
\r
34 RectShape chartArea = new RectShape(0.0, 0.0, width, height);
\r
35 this.chart.draw(canvas, chartArea);
\r
39 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
\r
40 int width = (int)(HistoryActivity.W * dw);//measureWidth(widthMeasureSpec);
\r
41 int height = measureHeight(heightMeasureSpec);
\r
42 setMeasuredDimension(width, height);
\r
43 // setMeasuredDimension(1000, 300);
\r
46 private int measureWidth(int measureSpec) {
\r
48 //int specMode = MeasureSpec.getMode(measureSpec);
\r
49 int specSize = MeasureSpec.getSize(measureSpec);
\r
56 private int measureHeight(int measureSpec) {
\r
58 //int specMode = MeasureSpec.getMode(measureSpec);
\r
59 int specSize = MeasureSpec.getSize(measureSpec);
\r
65 public void setChart(AFreeChart chart) {
\r
70 public boolean onTouchEvent(MotionEvent event) {
\r
74 int type = event.getAction();
\r
75 int count = event.getPointerCount();
\r
78 case MotionEvent.ACTION_DOWN:
\r
83 case MotionEvent.ACTION_MOVE:
\r
84 int history = event.getHistorySize() / count;
\r
86 for (int i = 0; i < history; i++){
\r
87 int index1 = event.findPointerIndex(0);
\r
88 int index2 = event.findPointerIndex(1);
\r
90 if (index1 >= 0 && index2 >= 0){
\r
91 int ux1 = (int) event.getHistoricalX(index1, i);
\r
92 int uy1 = (int) event.getHistoricalY(index1, i);
\r
93 int ux2 = (int) event.getHistoricalX(index2, i);
\r
94 int uy2 = (int) event.getHistoricalY(index2, i);
\r
95 int ss = (ux1 - ux2) * (ux1 - ux2) + (uy1 - uy2) * (uy1 - uy2);
\r
97 float drr = rotateR(rr, ss);
\r
99 magnification(drr);
\r
104 else if (index1 >= 0 || index2 >= 0){
\r
113 int ux = (int) event.getHistoricalX(index, i);
\r
114 int uy = (int) event.getHistoricalY(index, i);
\r
116 // float rx = rotateXY(tx, ux);
\r
117 // float ry = rotateXY(ty, uy);
\r
118 // if (rx != 0 || ry != 0) {
\r
119 // drawer.rotate(rx, ry, 0);
\r
127 int index1 = event.findPointerIndex(0);
\r
128 int index2 = event.findPointerIndex(1);
\r
129 if (index1 >= 0 && index2 >= 0){
\r
130 int ux1 = (int) event.getX(index1);
\r
131 int uy1 = (int) event.getY(index1);
\r
132 int ux2 = (int) event.getX(index2);
\r
133 int uy2 = (int) event.getY(index2);
\r
134 int ss = (ux1 - ux2) * (ux1 - ux2) + (uy1 - uy2) * (uy1 - uy2);
\r
136 float drr = rotateR(rr, ss);
\r
138 magnification(drr);
\r
143 else if (index1 >= 0 || index2 >= 0){
\r
152 int ux = (int) event.getX(index);
\r
153 int uy = (int) event.getY(index);
\r
155 // float rx = rotateXY(tx, ux);
\r
156 // float ry = rotateXY(ty, uy);
\r
157 // if (rx != 0 || ry != 0) {
\r
158 // drawer.rotate(rx, ry, 0);
\r
171 private void magnification(float drr) {
\r
179 int width = (int)(HistoryActivity.W * dw);
\r
180 this.setMinimumWidth(width);
\r
181 activity.magnification(dw);
\r
182 this.requestLayout();
\r
185 private float rotateR(int src, int dst){
\r
189 else if (src < dst){
\r