我正在通过Google查看this sample drawing app,当我在模拟器中运行应用程序并尝试使用鼠标进行绘制时,绘图看起来并不顺畅。圆圈出现时它们之间有间隙。只有当我慢慢地拖动鼠标时,我才会得到一条完整的线条。我还没有一个实际的设备来测试它,所以我想知道它是如何在实际设备上,或者这是一个模拟器行为?
如果这也是它在设备上的显示方式,我该怎么做才能使触摸平滑?
更新
执行绘图的实际代码是:
private void drawPoint(float x, float y, float pressure, float width) {
if (width < 1) width = 6;
if (mBitmap != null) {
float radius = width / 2;
int pressureLevel = (int)(pressure * 255);
mPaint.setARGB(pressureLevel, 255, 255, 255);
mCanvas.drawCircle(x, y, radius, mPaint);
mRect.set((int) (x - radius - 2), (int) (y - radius - 2),
(int) (x + radius + 2), (int) (y + radius + 2));
invalidate(mRect);
}
}
@Override public boolean onTouchEvent(MotionEvent event) {
int N = event.getHistorySize();
int P = event.getPointerCount();
for (int i = 0; i < N; i++) {
for (int j = 0; j < P; j++) {
mCurX = event.getHistoricalX(j, i);
mCurY = event.getHistoricalY(j, 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));
}
}
任何帮助改进它将非常感谢。
答案 0 :(得分:2)
它将是锯齿状的,但我相信代码是绘制点,所以如果你只绘制一条线,从最后一端绘制到新点开始,它将是连续的。
是的,它在实际设备上看起来会一样。
另一个选项,我在内存中做的是,有一些压力值在0到255之间,或0和1,始终将其设置为最高值。这实际上可能是解决您问题的简单方法。
如果您显示实际执行绘图的代码,那将会有所帮助,顺便说一句。
<强>更新强>
正如我所提到的,改变这一行:
int pressureLevel = (int)(pressure * 255);
到
int pressureLevel = (int)(255);
应该解决你的问题。
如果没有,那么您可能只想使用drawCircle
,而不是使用drawLine
,那么您将跟踪刚刚绘制的最后一个圆圈。
答案 1 :(得分:0)
你最好在设备而不是模拟器上运行,因为模拟器处理实时动作太慢了:)。
答案 2 :(得分:0)
也许试试这个:
public boolean onTouch(View view, MotionEvent event) {
if (event.getHistorySize() == 0) {
x = event.getX();
y = event.getY();
}
if (x == 0 && y == 0) {
x = event.getX();
y = event.getY();
}
bitmapCanvas.drawLine(x, y, event.getX(), event.getY(), paint);
x = event.getX();
y = event.getY();
invalidate();
return true;
}
有些事情需要改进,但总的来说这对画画有好处。
答案 3 :(得分:0)
有一种简单的方法可以解决这个问题, 定义mPaint属性时,请尝试:
mPaint.setStrokeJoin(Paint.Join.ROUND);
此属性将“锯齿状线条”连接成一条漂亮的平滑线。