Я разработал игру-головоломку. В моей игре у меня есть несколько пользовательских представлений, которые вложены в FrameLayout, как слои. Каждый вид отображает растровое изображение. Самым большим растровым изображением является игровое поле, и оно занимает около 2/3 размера экрана. Есть также фоновое изображение под FrameLayout.
Когда пользователь касается экрана, с этим видом игрового поля выполняется простая анимация вида - его можно поворачивать или переворачивать.
Все это отлично работает на небольших экранах, но пользователи сообщали о проблемах с производительностью на Galaxy Tab - заметное отставание перед запуском анимации и сама анимация не плавная. (Размер растрового изображения игрового поля на этих экранах составляет около 600 * 600 пикселей)
Вот мой макет:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rootFrame"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/backgroundImageLayer"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/background"
android:scaleType="fitXY"/>
<FrameLayout android:id="@+id/gameFrame"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<com.mygame.BoardView
android:id="@+id/boardLayer"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<com.mygame.SomeObjectView
android:id="@+id/someObjectLayer"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<com.mygame.SomeOtherObjectView
android:id="@+id/someOtherObjectLayer"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</FrameLayout>
</FrameLayout>
А вот и мой класс BoardView.
public class BoardView extends View {
Bitmap b;
int x;
int y;
public BoardView(Context context, AttributeSet attrs) {
super(context, attrs);
// calculate size of the bitmap
b = Bitmap.createBitmap(sizeX, sizeY, Bitmap.Config.ARGB_4444);
createMyBitmap();
}
private void createMyBitmap() {
Canvas c;
c = new Canvas(b);
// lots of c.drawRect() and c.drawLine() , using opaque and semi-transparent colors
}
@Override
public void onDraw(Canvas canvas) {
canvas.drawBitmap(b, x, y, null);
}
}
И фрагмент, где я делаю анимацию, все довольно просто:
AnimationRotate anim1=new AnimationRotate(startAngle,endAngle,centerX,centerY);
anim1.setDuration(500);
anim1.setInterpolator(newDecelerateInterpolator());
startAnimation(anim1);
Так что же вызывает лаги с анимацией вида и как я могу это исправить?
Мой подход правильный, или, может быть, я должен использовать SurfaceView или рамочную анимацию или что-то еще?