Help us understand the problem. What is going on with this article?

【内部用】android/javaでのアニメーション

はじめに

基本的にアプリは動くのでアニメーションは大事です。
特にゲームエディタ企画(ScriptEditor班以外)において今から記述するcanvasのアニメーションは習得必須です

仕組み

今回はviewのonDrawを繰り返し実行することでアニメーションを実現しています
もっといい方法があるのかもしれません

注意

パッケージ名をcom.test.gameeditorとしていますが適切なものに直して下さい

activity_main.xml

LinearLayout がrootにあってその中に独自viewがある一般的な編成です

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <com.test.gameeditor.MyCanvas
        android:id="@+id/canvas"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

MainActivity.java

レイアウトをactivity_main.xmlに設定する処理とMyCanvasのonDraw()を60msに一回呼ぶ処理が書かれています

MainActivity.java
package com.test.gameeditor;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final MyCanvas canvas = (MyCanvas) findViewById(R.id.canvas);
        final Handler handler = new Handler();
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                canvas.invalidate();
                handler.postDelayed(this, 60);
            }
        };
        handler.post(runnable);
    }
}

MyCanvas.java

アニメーションの内容をonDraw()の中に記述します。

MyCanvas.java
package com.test.gameeditor;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
import android.util.AttributeSet;
public class MyCanvas extends View {
    private Paint mPaint = new Paint();
    Context context;
    int x=100;
    public MyCanvas(Context context) {
        super(context);
    }
    public MyCanvas(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
    }
    @Override
    protected void onDraw(android.graphics.Canvas canvas) {
        super.onDraw(canvas);
        x+=5;
        canvas.drawRect(0,0,x,getHeight(),mPaint);
    }
}

あとがき

これをマスターすればアニメーションが描けるよ


Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away