Android在Canvas上更快地移动形状

时间:2015-01-26 13:19:38

标签: android android-animation android-canvas android-drawable

我有一个从ImageView扩展的类(我们称之为' surface ')。在onDraw方法上,在画布上绘制了一个小点。当我点击一个按钮时,我尝试将此点移动到另一个位置。您可以考虑翻译动画的手动版本。它有效但现在我试图找出这种移动的速度。我的意思是我希望点移动更快。

surface 的相关部分:

private float actual_x=100,actual_y=100; // Dot is drawn on 100,100 at beginning
private float increase_x,increase_y;
private boolean isMovingResume=false;
private int moving_counter;

public void changeLocation(float x,float y){
    isMovingResume=true;
    moving_counter=0;
    increase_x=(x-actual_x)/50;
    increase_y=(y-actual_y)/50;
    invalidate(); // This trigger onDraw method
}

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawCircle(actual_x,actual_y,15,fill_paint);
    if(isMovingResume){
        actual_x=actual_x+increase_x;
        actual_y=actual_y+increase_y;
        if(moving_counter==49){  // Moving will end after 50 redraw
            isMovingResume=false;
        }
        else{
            moving_counter++;
        }
        invalidate(); //redraw
    }
}

点击我的按钮:

button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        surface.changeLocation(200,200);
                    }
                });

就像我说的那样,但是我希望它更快。例如,在这种情况下,移动时间是2秒,我怎么能让它0.5秒? 感谢所有回复。

1 个答案:

答案 0 :(得分:0)

您需要切换到surfaceview甚至更快的纹理视图,两者都使用画布,并且具有更好的性能。 Textureview特别是因为它是硬件加速的,我也觉得它比surfaceview更好。那甚至考虑去GLSurfaceView。

您可以看到surfaceview和textureview的一些示例代码:Here