createBitmap方法能夠截取源位圖不同位置的塊,實(shí)現(xiàn)游戲背景的移動(dòng)
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyView(MainActivity.this));
}
class MyView extends View{
//背景圖實(shí)際高度
final int BACK_HEIGHT=1700;
//背景圖和飛機(jī)
private Bitmap back;
private Bitmap plane;
final int WIDTH=640,HEIGHT=880;
//Matrix實(shí)例用于控制縮放
private Matrix matrix=new Matrix();
//圖片開始的Y坐標(biāo)
private int StartY=BACK_HEIGHT-HEIGHT;
public MyView(Context context) {
super(context);
back=BitmapFactory.decodeResource(context.getResources(), R.drawable.back_img);
//獲取窗口管理器
WindowManager windowManager=getWindowManager();
Display display=windowManager.getDefaultDisplay();
DisplayMetrics metrics=new DisplayMetrics();
display.getMetrics(metrics);
//獲得屏幕寬度
float screenWidth=metrics.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){
//圖片向上移動(dòng)/回到初始狀態(tài)
if(StartY<3){
StartY=BACK_HEIGHT-HEIGHT;
}else{
StartY-=3;
}
}
//通知VIew重繪(調(diào)用OnDraw方法)
invalidate();
}
};
//每100ms移動(dòng)一次
new Timer().schedule(new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
handler.sendEmptyMessage(0x123);
}
}, 0,100);
}
@Override
protected void onDraw(Canvas canvas) {
//截取背景圖的一段作為實(shí)際繪制的背景圖
Bitmap bitmap2=Bitmap.createBitmap(back,0,StartY,WIDTH,HEIGHT,matrix,false);
canvas.drawBitmap(bitmap2, 0, 0,null);
canvas.drawBitmap(plane, 320,700, null);
}
}