Alkalmak‎ > ‎2016-17-es tanév‎ > ‎

15. alkalom

Feladat

Nézzük meg, mi mindent kell tudni egy "egy gombos játékhoz".

Észlelnünk kell, hogyha a játékos hozzáér a képernyőhöz, illetve ha elengedi azt. Ettől függően ugrik egyet a karakter, átfordul a gravitáció, stb. Tehát az eseménytől függően kell kirajzolnunk egy képet a képernyőre.

Egy egyszerű példával kezdjük, a képernyő teli zöld, ha nem érünk hozzá, és átvált pirosba érintés esetén.

Ehhez létrehozunk egy saját View-t, MyView néven, ezt adjuk hozzá az activity_main.xml layout fájlhoz.

Forráskód

res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<hu.kodolas.erintesrajzolas.MyView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="hu.kodolas.erintesrajzolas.MainActivity">

</hu.kodolas.erintesrajzolas.MyView>

hu.kodolas.erintesrajzolas.MyView

package hu.kodolas.erintesrajzolas;


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class MyView extends View {

    private static final int INTERVAL = 200;

    private static final Paint RED = new Paint();
    private static final Paint GREEN = new Paint();

    static {
        RED.setColor(Color.RED);
        GREEN.setColor(Color.GREEN);
    }

    private boolean touched = false;

    public MyView(Context context) {
        super(context);
        init();
    }

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    private void init() {
        setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        touched = true;
                        break;
                    case MotionEvent.ACTION_UP:
                        touched = false;
                        break;
                }
                return true;
            }
        });
    }

    @Override
    protected void onDraw(Canvas canvas) {
        int width = canvas.getWidth();
        int height = canvas.getHeight();
        if (touched)
            canvas.drawRect(0, 0, width, height, RED);
        else
            canvas.drawRect(0, 0, width, height, GREEN);

        postInvalidateDelayed(INTERVAL);
    }
}