2012-03-03 2 views
0

У меня есть анимация спрайтов в моем приложении, и она отлично работает для стандартных экранов размера телефона, но всякий раз, когда я помещаю ее на планшет, анимация становится глючной и не выглядит правильной. Я думаю, что это имеет какое-то отношение к высоте и ширине изображения. Я пробовал устанавливать их как dp и sp, но они все равно не будут отображаться прямо на планшете.Неверное изображение рендеринга на Android-планшете

Вот моя анимация XML

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal" 
    android:paddingLeft="100dp" > 

    <view 
     android:id="@+id/animation" 
     android:layout_width="180dp" 
     android:layout_height="220dp" 
     class="com.scale.AndroidAnimation" /> 
</LinearLayout> 

Вот мой код анимации

public class AndroidAnimation extends View{ 
    private Bitmap mAnimation; 
    private Rect mSRectangle; 
    private int mNoOfFrames; 
    private int mCurrentFrame; 
    private int mSpriteHeight; 
    private int mSpriteWidth; 

    public AndroidAnimation(Context context, AttributeSet aSet) { 
     super(context, aSet);   
     mSRectangle = new Rect(0,0,0,0); 
     mCurrentFrame = 0; 
    } 

    public void init(Bitmap theBitmap, int Height, int Width, int theFrameCount) { 
     mAnimation = theBitmap; 
     mSpriteHeight = Height; 
     mSpriteWidth = Width; 
     mSRectangle.top = 0; 
     mSRectangle.bottom = mSpriteHeight; 
     mSRectangle.left = 0; 
     mSRectangle.right = mSpriteWidth; 
     mNoOfFrames = theFrameCount; 
     mCurrentFrame = 0; 
    } 

    public void update() { 
     mCurrentFrame++; 
     mCurrentFrame %= mNoOfFrames; 
     mSRectangle.left = mCurrentFrame * mSpriteWidth; 
     mSRectangle.right = mSRectangle.left + mSpriteWidth;  
    } 

    @Override 
    public void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     Rect dest = new Rect(0, 0, mSpriteWidth, mSpriteHeight); 
     canvas.drawBitmap(mAnimation, mSRectangle, dest, null); 
    } 
} 

Где я инициализировать его

anim = (AndroidAnimation) findViewById(R.id.animation); 
anim.init(BitmapFactory.decodeResource(getResources(), R.drawable.connecting_sprite), 300, 170, 3); 
mHandler.removeCallbacks(myTimerTask); 
mHandler.postDelayed(myTimerTask, 300); 

Мой обработчик, который прогрессирует его

public void run() { 
    mHandler.removeCallbacks(myTimerTask); 

    if (mCurrScreen == WAITING_SCREEN) { 
     mHandler.postDelayed(myTimerTask, 300); 
    } 

    anim.update(); 
    anim.invalidate(); 
} 

Заранее благодарим!

ответ

0

Это хороший способ создать отдельную компоновку для планшета. Создайте папку layout-xlarge в res и поместите свой новый файл layout.xml макета, который оптимизирован для экрана планшета.

Смежные вопросы