Android MotionEvent ACTION_MOVE 效率。如何提高绩效?

2024-01-05

我目前正在开发一个允许自由绘图的应用程序。

我目前使用的方法如下:

currentLine 是一个列表,保存所有点的历史记录ACTION_MOVE返回。

public boolean onTouchEvent (MotionEvent event) {

        switch (event.getAction()) {
            case MotionEvent.ACTION_MOVE:
                Point p = new Point(event.getX(),event.getY());
                currentLine.addPoint(p);
                    invalidate();
                break;
        }

        return true;

}

然后我把这些点画在onDraw我的课的方法。

@Override
protected void onDraw(Canvas c) {
    super.onDraw(c);

    //Draw Background Color
    c.drawColor(Color.BLUE);

    //Setup Paint
    Paint p = new Paint();
    p.setStyle(Style.FILL);
    p.setColor(COLOR.WHITE);

    //iterate through points
    if(currentLine.size()>0){
        for(int x = 0;x<currentLine.size();x++){
            c.drawCircle(currentLine.get(x).getX(), currentLine.get(x).getY(), 3, p);
        }
    }

}

而且这种方法效果很好,没有任何滞后或任何问题。

除此之外,它没有得到enough它需要的要点。

例如,如果我要在整个屏幕上快速拖动手指,它可能只会绘制整个事件的 15 个点。

如何提高 MotionEvent 的性能/速度?我怎样才能得到more点?或者还有什么我应该做的吗?

- - 编辑 - -

我已经设法自己解决了。

而不是使用drawCircle,我切换到drawLine.

Example:

if(points.size()>0){
        for(int x = 0;x<points.size()-1;x++){
            c.drawLine(points.get(x).getX(), points.get(x).getY(), points.get(x+1).getX(), points.get(x+1).getY(), p);
        }
}

这会产生实线,这就是我想要的。

但是,出于知识的考虑,我仍然想知道如何加快 MotionEvents 的速度。

详细的答案将不胜感激


显然,瓶颈在于绘图方法。

如果您正在使用 android 3.0+,请在 GPU 上绘制所有这些疯狂的东西。 添加属性

android:hardwareAccelerated="true"

to the <application>清单中的标签。这将难以置信地增加绘图时间。

此外,如果只需要更新一点点,请尽量不要重绘整个内容。 调用 invalidate(Rect dirty) 而不是 invalidate()。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android MotionEvent ACTION_MOVE 效率。如何提高绩效? 的相关文章

随机推荐