我是android的新手,我在理解如何动画画布时遇到了问题。 基本上,当球从楼梯上落下时,我画了一个红球和一个楼梯
这就是它的样子。
任何人都可以帮助我使用我应该使用的方法吗?如果你能为我提供一个非常有用的源代码。
这是我的源代码:
DrawingView.java
package com.ballandstair;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.view.View;
public class DrawingView extends View {
DrawingView(Context context) {
super(context);
}
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
Paint paint = new Paint();
Path path = new Path();
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.RED);
paint.setAntiAlias(true);
canvas.drawCircle(100, 50, 25, paint);
paint.setColor(Color.BLUE);
paint.setStyle(Paint.Style.FILL);
path.moveTo(75, 75);
path.lineTo(125, 75);
path.lineTo(125, 125);
path.lineTo(175, 125);
path.lineTo(175, 175);
path.lineTo(225, 175);
path.lineTo(225, 225);
path.lineTo(275, 225);
path.lineTo(275, 275);
path.lineTo(325, 275);
path.lineTo(325, 325);
path.lineTo(75, 325);
path.close();
canvas.drawPath(path, paint);
}
}
MainActivity.java
package com.ballandstair;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DrawingView drawing = new DrawingView(this);
setContentView(drawing);
}
}
答案 0 :(得分:1)
基本上任何动画逻辑都由3个组件组成:
参数:您要绘制的对象的位置,旋转和比例;
线程:您可以选择使用2个线程单独绘制和更新对象属性(位置,旋转和比例),或者在一个线程中执行它们。
无限循环:一个绘制的循环 - >更新 - >画画......无限地
有很多方法可以实现它们,我只能建议你可以使用的一些API:
View.invalidate(),使用它来请求框架重绘您的视图,以便调用onDraw()方法。
[View.postDelayed()](http://developer.android.com/reference/android/view/View.html#postDelayed(java.lang.Runnable,long)),用这个来制作在onDraw()方法结束时调用View.invalidate()的无限循环。
答案 1 :(得分:0)
你需要做(至少)两件事:
第二步需要一点小心。您可能想要编写一个调用Thread.sleep(frameRate)
的循环(其中frameRate
是帧之间的毫秒数),更新球位置,然后调用invalidate()
以使您的自定义视图触发一个重画。这个问题是你无法暂停事件线程。 (再次)有两种处理方式:
invalidate()
,但可以将postInvalidate()
调用为相同的效果。Runnable
在其run()
方法中更新球位置,调用invalidate()
,然后要求视图在延迟后再次运行Runnable
本身frameRate
(通过致电postDelayed()
)。这两种方法都是合理的方法。您还需要逻辑来了解动画何时结束,并且您可能希望让用户控制它何时开始或允许重放。