本文内容摘自《疯狂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);
}
}
}