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;
}
}
surfaceview背景图片
最新推荐文章于 2025-03-07 00:23:23 发布
