Merge "Improve touch paint sample to use geometrical touch width." into gingerbread
This commit is contained in:
@@ -159,21 +159,20 @@ public class TouchPaint extends GraphicsActivity {
|
|||||||
public class MyView extends View {
|
public class MyView extends View {
|
||||||
private static final int FADE_ALPHA = 0x06;
|
private static final int FADE_ALPHA = 0x06;
|
||||||
private static final int MAX_FADE_STEPS = 256/FADE_ALPHA + 4;
|
private static final int MAX_FADE_STEPS = 256/FADE_ALPHA + 4;
|
||||||
|
private static final int TRACKBALL_SCALE = 10;
|
||||||
|
|
||||||
private Bitmap mBitmap;
|
private Bitmap mBitmap;
|
||||||
private Canvas mCanvas;
|
private Canvas mCanvas;
|
||||||
private final Rect mRect = new Rect();
|
private final Rect mRect = new Rect();
|
||||||
private final Paint mPaint;
|
private final Paint mPaint;
|
||||||
private final Paint mFadePaint;
|
private final Paint mFadePaint;
|
||||||
private boolean mCurDown;
|
private float mCurX;
|
||||||
private int mCurX;
|
private float mCurY;
|
||||||
private int mCurY;
|
|
||||||
private float mCurPressure;
|
|
||||||
private float mCurSize;
|
|
||||||
private int mCurWidth;
|
|
||||||
private int mFadeSteps = MAX_FADE_STEPS;
|
private int mFadeSteps = MAX_FADE_STEPS;
|
||||||
|
|
||||||
public MyView(Context c) {
|
public MyView(Context c) {
|
||||||
super(c);
|
super(c);
|
||||||
|
setFocusable(true);
|
||||||
mPaint = new Paint();
|
mPaint = new Paint();
|
||||||
mPaint.setAntiAlias(true);
|
mPaint.setAntiAlias(true);
|
||||||
mPaint.setARGB(255, 255, 255, 255);
|
mPaint.setARGB(255, 255, 255, 255);
|
||||||
@@ -229,61 +228,59 @@ public class TouchPaint extends GraphicsActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override public boolean onTrackballEvent(MotionEvent event) {
|
@Override public boolean onTrackballEvent(MotionEvent event) {
|
||||||
boolean oldDown = mCurDown;
|
|
||||||
mCurDown = true;
|
|
||||||
int N = event.getHistorySize();
|
int N = event.getHistorySize();
|
||||||
int baseX = mCurX;
|
final float scaleX = event.getXPrecision() * TRACKBALL_SCALE;
|
||||||
int baseY = mCurY;
|
final float scaleY = event.getYPrecision() * TRACKBALL_SCALE;
|
||||||
final float scaleX = event.getXPrecision();
|
|
||||||
final float scaleY = event.getYPrecision();
|
|
||||||
for (int i=0; i<N; i++) {
|
for (int i=0; i<N; i++) {
|
||||||
//Log.i("TouchPaint", "Intermediate trackball #" + i
|
//Log.i("TouchPaint", "Intermediate trackball #" + i
|
||||||
// + ": x=" + event.getHistoricalX(i)
|
// + ": x=" + event.getHistoricalX(i)
|
||||||
// + ", y=" + event.getHistoricalY(i));
|
// + ", y=" + event.getHistoricalY(i));
|
||||||
drawPoint(baseX+event.getHistoricalX(i)*scaleX,
|
mCurX += event.getHistoricalX(i) * scaleX;
|
||||||
baseY+event.getHistoricalY(i)*scaleY,
|
mCurY += event.getHistoricalY(i) * scaleY;
|
||||||
event.getHistoricalPressure(i),
|
drawPoint(mCurX, mCurY, 1.0f, 16.0f);
|
||||||
event.getHistoricalSize(i));
|
|
||||||
}
|
}
|
||||||
//Log.i("TouchPaint", "Trackball: x=" + event.getX()
|
//Log.i("TouchPaint", "Trackball: x=" + event.getX()
|
||||||
// + ", y=" + event.getY());
|
// + ", y=" + event.getY());
|
||||||
drawPoint(baseX+event.getX()*scaleX, baseY+event.getY()*scaleY,
|
mCurX += event.getX() * scaleX;
|
||||||
event.getPressure(), event.getSize());
|
mCurY += event.getY() * scaleY;
|
||||||
mCurDown = oldDown;
|
drawPoint(mCurX, mCurY, 1.0f, 16.0f);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public boolean onTouchEvent(MotionEvent event) {
|
@Override public boolean onTouchEvent(MotionEvent event) {
|
||||||
int action = event.getAction();
|
int action = event.getActionMasked();
|
||||||
mCurDown = action == MotionEvent.ACTION_DOWN
|
if (action != MotionEvent.ACTION_UP && action != MotionEvent.ACTION_CANCEL) {
|
||||||
|| action == MotionEvent.ACTION_MOVE;
|
int N = event.getHistorySize();
|
||||||
int N = event.getHistorySize();
|
int P = event.getPointerCount();
|
||||||
for (int i=0; i<N; i++) {
|
for (int i = 0; i < N; i++) {
|
||||||
//Log.i("TouchPaint", "Intermediate pointer #" + i);
|
for (int j = 0; j < P; j++) {
|
||||||
drawPoint(event.getHistoricalX(i), event.getHistoricalY(i),
|
mCurX = event.getHistoricalX(j, i);
|
||||||
event.getHistoricalPressure(i),
|
mCurY = event.getHistoricalY(j, i);
|
||||||
event.getHistoricalSize(i));
|
drawPoint(mCurX, mCurY,
|
||||||
|
event.getHistoricalPressure(j, i),
|
||||||
|
event.getHistoricalTouchMajor(j, i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int j = 0; j < P; j++) {
|
||||||
|
mCurX = event.getX(j);
|
||||||
|
mCurY = event.getY(j);
|
||||||
|
drawPoint(mCurX, mCurY, event.getPressure(j), event.getTouchMajor(j));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
drawPoint(event.getX(), event.getY(), event.getPressure(),
|
|
||||||
event.getSize());
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void drawPoint(float x, float y, float pressure, float size) {
|
private void drawPoint(float x, float y, float pressure, float width) {
|
||||||
//Log.i("TouchPaint", "Drawing: " + x + "x" + y + " p="
|
//Log.i("TouchPaint", "Drawing: " + x + "x" + y + " p="
|
||||||
// + pressure + " s=" + size);
|
// + pressure + " width=" + width);
|
||||||
mCurX = (int)x;
|
if (width < 1) width = 1;
|
||||||
mCurY = (int)y;
|
if (mBitmap != null) {
|
||||||
mCurPressure = pressure;
|
float radius = width / 2;
|
||||||
mCurSize = size;
|
int pressureLevel = (int)(pressure * 255);
|
||||||
mCurWidth = (int)(mCurSize*(getWidth()/3));
|
|
||||||
if (mCurWidth < 1) mCurWidth = 1;
|
|
||||||
if (mCurDown && mBitmap != null) {
|
|
||||||
int pressureLevel = (int)(mCurPressure*255);
|
|
||||||
mPaint.setARGB(pressureLevel, 255, 255, 255);
|
mPaint.setARGB(pressureLevel, 255, 255, 255);
|
||||||
mCanvas.drawCircle(mCurX, mCurY, mCurWidth, mPaint);
|
mCanvas.drawCircle(x, y, radius, mPaint);
|
||||||
mRect.set(mCurX-mCurWidth-2, mCurY-mCurWidth-2,
|
mRect.set((int) (x - radius - 2), (int) (y - radius - 2),
|
||||||
mCurX+mCurWidth+2, mCurY+mCurWidth+2);
|
(int) (x + radius + 2), (int) (y + radius + 2));
|
||||||
invalidate(mRect);
|
invalidate(mRect);
|
||||||
}
|
}
|
||||||
mFadeSteps = 0;
|
mFadeSteps = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user