-
Notifications
You must be signed in to change notification settings - Fork 252
/
ScaleGestureItemDemo.java
122 lines (107 loc) · 4.73 KB
/
ScaleGestureItemDemo.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package cn.hzw.doodledemo;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import cn.forward.androids.ScaleGestureDetectorApi27;
import cn.hzw.doodle.DoodleColor;
import cn.hzw.doodle.DoodleOnTouchGestureListener;
import cn.hzw.doodle.DoodlePen;
import cn.hzw.doodle.DoodleShape;
import cn.hzw.doodle.DoodleText;
import cn.hzw.doodle.DoodleTouchDetector;
import cn.hzw.doodle.DoodleView;
import cn.hzw.doodle.IDoodleListener;
import cn.hzw.doodle.core.IDoodle;
import cn.hzw.doodle.core.IDoodleItem;
import cn.hzw.doodle.core.IDoodleSelectableItem;
import cn.hzw.doodle.dialog.DialogController;
/**
* Change text's size by scale gesture
* 通过手势缩放item
*/
public class ScaleGestureItemDemo extends Activity {
private DoodleView doodleView;
private DoodleOnTouchGestureListener touchGestureListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scale_gesture_item);
// step 1
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.thelittleprince2);
doodleView = new DoodleView(this, bitmap, new IDoodleListener() {
@Override
public void onSaved(IDoodle doodle, Bitmap doodleBitmap, Runnable callback) {
Toast.makeText(ScaleGestureItemDemo.this, "onSaved", Toast.LENGTH_SHORT).show();
}
@Override
public void onReady(IDoodle doodle) {
doodle.setSize(40 * doodle.getUnitSize());
IDoodleSelectableItem item = new DoodleText(doodle, "Hello, world", doodle.getSize(), doodle.getColor(), 10, doodleView.getBitmap().getHeight()/2);
touchGestureListener.setSelectedItem(item);
doodle.addItem(item);
}
});
// step 2
touchGestureListener = new ScaleItemOnTouchGestureListener(doodleView, new DoodleOnTouchGestureListener.ISelectionListener() {
@Override
public void onSelectedItem(IDoodle doodle, IDoodleSelectableItem selectableItem, boolean selected) {
}
@Override
public void onCreateSelectableItem(final IDoodle doodle, final float x, final float y) {
if (doodle.getPen() != DoodlePen.TEXT) {
return;
}
DialogController.showInputTextDialog(ScaleGestureItemDemo.this, null,
new View.OnClickListener() {
@Override
public void onClick(View v) {
String text = (v.getTag() + "").trim();
if (TextUtils.isEmpty(text)) {
return;
}
IDoodleSelectableItem item = new DoodleText(doodle, text, doodle.getSize(), doodle.getColor().copy(), x, y);
doodle.addItem(item);
touchGestureListener.setSelectedItem(item);
doodle.refresh();
}
}, null);
}
});
DoodleTouchDetector touchDetector = new DoodleTouchDetector(this, touchGestureListener);
doodleView.setDefaultTouchDetector(touchDetector);
// step 3
doodleView.setPen(DoodlePen.TEXT);
doodleView.setShape(DoodleShape.HAND_WRITE);
doodleView.setColor(new DoodleColor(Color.RED));
// step 4
ViewGroup container = (ViewGroup) findViewById(R.id.doodle_container);
container.addView(doodleView);
}
/**
* Change selected item's size by scale gesture.
* Note that this class extends DoodleOnTouchGestureListener and does not affect the original gesture logic.
* <p>
* 注意,这里继承了DoodleOnTouchGestureListener,不影响原有的手势逻辑
*/
private static class ScaleItemOnTouchGestureListener extends DoodleOnTouchGestureListener {
public ScaleItemOnTouchGestureListener(DoodleView doodle, ISelectionListener listener) {
super(doodle, listener);
}
@Override
public boolean onScale(ScaleGestureDetectorApi27 detector) {
if (getSelectedItem() != null) {
IDoodleItem item = getSelectedItem();
item.setSize(item.getSize() * detector.getScaleFactor());
return true;
} else {
return super.onScale(detector);
}
}
}
}