gpt4 book ai didi

Android MotionEvent ACTION_MOVE 效率。如何提高性能?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:58:55 25 4
gpt4 key购买 nike

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

我目前使用的方法如下:

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);
}
}

}

而且这种方法效果很好,没有任何延迟。

除了,它没有获得足够它需要的点数。

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

如何提高 MotionEvent 的性能/速度?我怎样才能获得更多积分?或者还有其他我应该做的事吗?

----编辑----

我已经设法自己解决了。

我没有使用 drawCircle,而是改用了 drawLine

例子:

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"

<application>在你的 list 中标记。这将难以置信地增加绘图时间。

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

关于Android MotionEvent ACTION_MOVE 效率。如何提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8484545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com