java - 在android中使 Canvas 动画

标签 java android

我是 android 的新手,我在理解如何为 Canvas 制作动画时遇到了问题。 基本上我画了一个红球和一个楼梯,当球应该从楼梯上掉下来的时候

这是它的样子。

enter image description here

谁能帮我看看我应该用什么方法?如果您能向我提供源代码,那将非常有帮助。

这是我的源代码:

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


    }
}

最佳答案

基本上任何动画逻辑都由 3 个组件组成:

  • 参数:您要绘制的对象的位置、旋转和比例;

  • 线程:您可以选择使用 2 个线程分别绘制和更新对象属性(位置、旋转和缩放),也可以在一个线程中完成。

  • 无限循环:无限循环绘制 -> 更新 -> 绘制 ...

实现方式有很多种,我只能推荐一些你可以使用的API:

  • View.invalidate() ,使用它来请求框架重绘您的 View ,因此您的 onDraw() 方法将被调用。

  • [View.postDelayed()](http://developer.android.com/reference/android/view/View.html#postDelayed(java.lang.Runnable, long)) ,用它来制作在 onDraw() 方法末尾无限循环调用 View.invalidate()。

关于java - 在android中使 Canvas 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11894578/

相关文章:

java - 整个程序可以是不可变的吗?

java - "pass by reference"到底是什么意思?

android - 从实时android中的视频中提取帧

android - 是否可以在 Android 应用程序中注入(inject)代码?

android - 更改每个项目的 RecyclerView.ItemDecoration 颜色

java - 循环以随机显示数组中的图像(Android)

java - 小猜谜游戏 GUI 在两个窗口中打开

Android Studio keystore 密码不可见

android - Android fragment 中的自定义属性

java - 以并发方式逐行处理文件