【发布时间】: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