Привет, я новичок в разработке для Android и пытаюсь создать простые живые обои для Android. У меня есть четыре PNG изображения. Обои изменяют фоновое изображение в соответствии с положением касания пользователя. Например, если пользователь не касается экрана, обои - down.png. Если пользователь касается левой части экрана, обои изменяются на left.png и т. Д.
Это класс BCWallpaperEngine, который расширяет Engine:
@Override
public void onTouchEvent(MotionEvent e) {
float x = e.getX();
switch (e.getAction()) {
case MotionEvent.ACTION_DOWN:
if (x < getDesiredMinimumWidth()/4) {
//right image
setSceneBackground(pawStatus.RIGHT);
}
else if(x < getDesiredMinimumWidth()*3/4){
//middle image
setSceneBackground(pawStatus.UP);
}else{
//left image
setSceneBackground(pawStatus.LEFT);
}
break;
case MotionEvent.ACTION_UP:
setSceneBackground(pawStatus.DOWN);
}
drawFrame();
super.onTouchEvent(e);
}
Это класс BCWallpaperService, который расширяет WallpaperService:
void setSceneBackground(pawStatus paw) {
Bitmap b;
switch(paw){
case UP:
b = BitmapFactory.decodeResource(getResources(), R.drawable.up);
//BitmapFactory.decodeFile("/sdcard/test2.png");
break;
case RIGHT:
b = BitmapFactory.decodeResource(getResources(), R.drawable.right);
break;
case LEFT:
b = BitmapFactory.decodeResource(getResources(), R.drawable.left);
break;
default:
b = BitmapFactory.decodeResource(getResources(), R.drawable.down);
}
if (null != mSceneBitmap)mSceneBitmap.recycle();
Matrix m = new Matrix();
m.setScale((float)mWallpaperWidth / (float)b.getWidth(),
(float)mWallpaperHeight / (float)b.getHeight());
mSceneBitmap = Bitmap.createBitmap(b, 0, 0,
b.getWidth(), b.getHeight(), m, true);
b.recycle();
}
Программа работает, но между касанием и сменой обоев существует огромная задержка (1-2 с).
Я уже сделал эти обои в процессе обработки, где они работают без задержки, но сейчас я пытаюсь реализовать их в Android Studio, чтобы добавить новые функции.