surfaceview背景图片

AnimationView是一个自定义的SurfaceView,它加载两张背景图片并实现上下滚动的动画效果。通过SurfaceHolder添加回调,创建自定义线程(MyThread)进行绘制。在run方法中,以200ms为间隔不断更新并绘制背景图片,当图片滚动到屏幕底部时会复位到顶部,实现了无缝滚动的视觉效果。
public class AnimationView extends SurfaceView implements Callback {

	Context ctxt = null;
	Canvas canvas = null;
	Paint paint = null;
	SurfaceHolder surfaceHolder = null;
	Bitmap bitmap01 = null;
	Bitmap bitmap02 = null;
	boolean isStop = false;
	MyThread thread = null;
	
	int backY01 = 0;
	int backY02 = 0;
	
	int screenWidth = 0;
	int screenHeight = 0;
	
	public AnimationView(Context context, int width, int height) {
		super(context);
		ctxt = context;
		this.screenWidth = width;
		this.screenHeight= height;
		paint = new Paint();
		surfaceHolder = this.getHolder();
		surfaceHolder.addCallback(this);
		bitmap01 = ReadBitMap(ctxt,R.drawable.map_0);
		bitmap02 = ReadBitMap(ctxt,R.drawable.map_1);
		backY01 = 0;
		backY02 = -screenHeight;
	}

	class MyThread extends Thread{
		@Override
		public void run() {
			while (isStop) {
				long startTime = System.currentTimeMillis();
				try {
				synchronized (surfaceHolder) {
					canvas = surfaceHolder.lockCanvas();
					Draw();
				}	
				} catch (Exception e) {
					// TODO: handle exception
				}finally{
				   surfaceHolder.unlockCanvasAndPost(canvas);
				}
				long endTime = System.currentTimeMillis();
				int diffTime = 
				(int)(endTime-startTime);
				while (diffTime < 200) {
					diffTime = (int)(System.currentTimeMillis()-startTime);
					Thread.yield();
				}
			}
			super.run();
		}
	}
	public void Draw(){
		renderBack();
		updateBack();
	}
	
	public void renderBack(){
		canvas.drawBitmap(bitmap01, 0, backY01, paint);
		canvas.drawBitmap(bitmap02, 0, backY02, paint);
	}
	public void updateBack(){
		backY01+=10;
		backY02+=10;
		if (backY01 == screenHeight) {
			backY01 = -screenHeight;
		}
		if (backY02 == screenHeight) {
			backY02 = -screenHeight;
		}
	}
	
	public Bitmap ReadBitMap(Context context, int resId) {
	    BitmapFactory.Options opt = 
	    new BitmapFactory.Options();
	    opt.inPreferredConfig = Bitmap.Config.RGB_565;
	    opt.inPurgeable = true;
	    opt.inInputShareable = true;
	    // 获取资源图片
	    InputStream is = 
	    context.getResources().openRawResource(resId);
	    return BitmapFactory.decodeStream(is, null, opt);
	}
	
	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
		

	}

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		isStop = true;
		thread = new MyThread();
		thread.start();
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		isStop = false;
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值