【发布时间】:2015-01-27 08:31:12
【问题描述】:
欢迎大家
我有一个背景图像,我想要它缓慢向右移动,当图像到达屏幕的右端并且图像的左侧开始端结束时,图像必须开始再次显示右侧的开始,作为无限的水平滚动。
如何在不产生位图溢出内存异常的情况下做到这一点?
我试着用画布画了两次位图……但它不流畅,跳跃非常令人毛骨悚然,而且没有优化:
universeBitmap = Bitmap.createScaledBitmap(universeBitmap, sw, sh, false);
universeView = new View(this){
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (paused==true){
canvas.drawBitmap(universeBitmap, universeX, 0, null);
return;
}
long currentTime=System.currentTimeMillis();
if ((currentTime-lastdrawTime)>100){
if (universeX>sw){
universeX=0;
}
lastdrawTime=currentTime;
universeX+=1;
}
canvas.drawBitmap(universeBitmap, universeX, 0, null);
canvas.drawBitmap(universeBitmap, universeX-sw, 0, null);
invalidate();
}
};
我也尝试过每 100 毫秒不使视图无效,但使用线程和处理程序,结果相同....令人毛骨悚然的非平滑运动:
universeBitmap = Bitmap.createScaledBitmap(universeBitmap, sw, sh, false);
universeView = new View(this){
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(universeBitmap, universeX, 0, null);
canvas.drawBitmap(universeBitmap, universeX-sw, 0, null);
}
};
.
.
.
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
if (universeX>sw){
universeX=0;
}
universeView.invalidate();
universeX+=1;
}
};
.
.
.
public void run() {
try {
while( !backgroundThread.interrupted() ) {
synchronized(this){
handler.sendEmptyMessage(0);
wait(100);
}
}
}
谢谢
【问题讨论】:
标签: android canvas bitmap android-canvas android-bitmap