我正在研究Android的绘画应用程序,我想使用设备触摸屏上的原始数据来调整用户的画笔。我见过其他适用于Android的应用程序(例如iSteam),其中笔刷的大小取决于屏幕上指纹的大小。就绘画应用而言,这将是一个巨大的特征。
有没有办法获取这些数据?我已经google了很长一段时间,但我没有找到任何来源证明它。我知道这是可能的,因为Dolphin Browser为Hero添加了多点触控支持,而在应用程序级别下没有任何变化。您必须能够获得原始数据的2D矩阵......
我真的很感激我能得到任何帮助!
答案 0 :(得分:6)
Motion Event课程中有一些属性。您可以使用getSize()方法查找对象的大小。 Motion Event类还可以访问压力,坐标等...
答案 1 :(得分:4)
如果您检查SDK中的APIDemos,则会有一个名为TouchPaint的简单paitning应用程序
package com.example.android.apis.graphics;
它使用以下内容在画布上绘制
@Override public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
mCurDown = action == MotionEvent.ACTION_DOWN
|| action == MotionEvent.ACTION_MOVE;
int N = event.getHistorySize();
for (int i=0; i<N; i++) {
//Log.i("TouchPaint", "Intermediate pointer #" + i);
drawPoint(event.getHistoricalX(i), event.getHistoricalY(i),
event.getHistoricalPressure(i),
event.getHistoricalSize(i));
}
drawPoint(event.getX(), event.getY(), event.getPressure(),
event.getSize());
return true;
}
private void drawPoint(float x, float y, float pressure, float size) {
//Log.i("TouchPaint", "Drawing: " + x + "x" + y + " p="
// + pressure + " s=" + size);
mCurX = (int)x;
mCurY = (int)y;
mCurPressure = pressure;
mCurSize = size;
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);
mCanvas.drawCircle(mCurX, mCurY, mCurWidth, mPaint);
mRect.set(mCurX-mCurWidth-2, mCurY-mCurWidth-2,
mCurX+mCurWidth+2, mCurY+mCurWidth+2);
invalidate(mRect);
}
mFadeSteps = 0;
}
希望有所帮助:)
答案 2 :(得分:0)
我正在开展类似的工作,我建议同时查看Canvas和Paint类。在动作事件中查看getHistorySize()也可能有助于确定特定中风的持续时间。