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

运行效果:

更多相关文章

  1. Ubuntu 试用Android(安卓)L版本
  2. Android(安卓)GUI系统框架介绍
  3. Android曲线绘制demo
  4. 《Android程序运行过程,Android》
  5. Android(安卓)manifest属性
  6. Android(安卓)曲线绘制Demo
  7. MainFest.xml android
  8. Android(安卓)代码改变图片颜色android:tint="@color/main_color
  9. android 代码proguard

随机推荐

  1. PHP优化教程之解决嵌套问题
  2. php中unable to fork报错简单解决方法
  3. PHP超级全局变量、魔术变量和魔术函数汇
  4. Node 模块
  5. 怎么画好人体动态?漫画人体结构绘画入门
  6. 事件,条件,列表渲染,计算属性与侦听器,组件之
  7. vue常用术语与常用指令
  8. R语言数据挖掘实践——关联分析预测用户
  9. Spring Cloud OpenFeign 超时与重试
  10. JS的闭包、访问器属性、类与对象的创建和