Android createBitmap截取實(shí)現(xiàn)移動(dòng)的游戲背景

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);
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容