Android Bitmap移动游戏背景

本文内容摘自《疯狂Android 讲义第3版》

package shortcut.song.com.myapplication;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;

import java.util.Timer;
import java.util.TimerTask;

public class MoveBack extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new MoveBackView(this, null));
    }

    class MoveBackView extends View{
        //背景图的实际高度
        final int BACK_HEIGHT = 1700;
        //背景图片Bitmap
        private Bitmap back;
        private Bitmap plane;
        //定义图片的宽高
        final int WIDTH = 320;  //640 
        final int HEIGHT = 320; //880
        private Matrix matrix = new Matrix();
        private int startY = BACK_HEIGHT - HEIGHT;

        public MoveBackView(Context context, AttributeSet set)
        {
            super(context, set);
            back = BitmapFactory.decodeResource(context.getResources(), R.drawable.back_img);
            //获取窗口管理器
            WindowManager windowManager = getWindowManager();
            Display display = windowManager.getDefaultDisplay();
            DisplayMetrics displayMetrics = new DisplayMetrics();
            display.getMetrics(displayMetrics);
            //获得屏幕宽度
            float screenWidth = displayMetrics.widthPixels;
            //获得图片缩放比例
            float scale = screenWidth / WIDTH;
            matrix.setScale(scale, scale);

            plane = BitmapFactory.decodeResource(context.getResources(), R.drawable.plane);

            final Handler handler = new Handler(){
                @Override
                public void handleMessage(Message msg) {
                    if (msg.what == 0x123)
                    {
                        if (startY <=  3)
                        {
                            startY = BACK_HEIGHT - HEIGHT;
                        }
                        else
                        {
                            startY -= 3;
                        }

                    }
                    invalidate();
                }
            };

            new Timer().schedule(new TimerTask() {
                @Override
                public void run() {
                    handler.sendEmptyMessage(0x123);
                }
            }, 0, 100);
        }

        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            Bitmap bitmap2 = Bitmap.createBitmap(back, 0, startY, WIDTH, HEIGHT, matrix, false);
            //绘制新位图
            canvas.drawBitmap(bitmap2, 0, 0, null);

            //绘制飞机
            canvas.drawBitmap(plane, 320, 400, null);
        }
    }

}

运行效果:

Android Bitmap移动游戏背景_第1张图片

你可能感兴趣的:(Android)