Merge "Improve touch paint sample to use geometrical touch width." into gingerbread

This commit is contained in:
Jeff Brown
2010-09-30 15:58:59 -07:00
committed by Android (Google) Code Review

View File

@@ -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;