Спрайт рендеринга изображения на планшете Android некорректно - PullRequest
0 голосов
/ 03 марта 2012

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

Вот моя анимация 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();
}

Заранее спасибо!

1 Ответ

0 голосов
/ 14 июля 2012

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

...