Добро пожаловать
У меня есть фоновое изображение, и я хочу, чтобы оно медленно двигалось вправо, и когда изображение достигает правого конца экрана с концом левой начальной стороны изображения, изображение должно снова начать показывать начало правой стороны в виде бесконечной горизонтальной прокрутки.
Как этого можно добиться, не создавая исключений переполнения памяти растрового изображения?
Пробовал отрисовывать два раза битмап с канвасом... но не плавно, очень жутко с прыжками и не оптимизировано:
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);
}
}
}
Спасибо