【问题标题】:Android moving a shape faster on CanvasAndroid 在 Canvas 上更快地移动形状
【发布时间】:2015-01-26 13:19:38
【问题描述】:

我有一个从 ImageView 扩展而来的类(我们称之为“surface”)。在 onDraw 方法中,一个小点正在画布上绘制。当我单击一个按钮时,我尝试将此点移动到另一个位置。您可以考虑像翻译动画的手动版本。它有效,但现在我试图弄清楚这种移动的速度。我的意思是我想让点移动得更快。

表面的相关部分:

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 秒? 感谢所有回复。

【问题讨论】:

  • 使用 ValueAnimator(或 ObjectAnimator)
  • 我应该给对象 Animator 什么对象?我的点只是一个形状。我应该将其转换为可绘制对象还是类似的东西?
  • 什么对象? “this”,你的自定义视图
  • 我的自定义 ImageView 覆盖了整个屏幕。我的点只是在 ImageView 的 onDraw 方法上绘制的形状。所以我只需要移动点形状(圆形)。不是整个 ImageView。我错了吗?
  • 不,你是对的,你只需要移动点

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-04
    • 2023-03-02
    • 2018-12-13
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多