口吃动画

时间:2014-07-08 14:06:29

标签: android animation smooth

我写了一个应用程序,它有一个适合整个屏幕的图像。 Image.resource是一个大小为768x1024像素的png。

<ImageView
    android:id="@+id/imgage1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scaleType="fitXY"
    android:src="@drawable/imagepng" />

为此Imageview设置动画的代码如下:

public void animate(int percent) {
    height = imgage1.getMeasuredHeight()/100;
    ObjectAnimator anim = ObjectAnimator.ofFloat(ActivityMain.this.imgage1, "translationY",ActivityMain.this.imgage1.getTranslationY(), - (percent*height));
    ObjectAnimator.setFrameDelay(24);
    anim.setDuration(5000);
    anim.setInterpolator(new AccelerateDecelerateInterpolator());
    anim.start();
    }
不幸的是,动画口吃不清。我认为这种口吃来自scaletype“fitXY”,因为在每个动画中,Imageview都会缩放png。 如果我想将fitXY与一个PNG用于所有Windowsize以消除口吃,我该怎么办

1 个答案:

答案 0 :(得分:2)

与此同时,我找到了动画口吃的原因:

因为Imageview的scaletype设置为fitXY,系统会在每个帧上呈现一个新的缩放位图,这会花费很多性能。 所以我没有通过XML将Bitmap附加到Imageview。这项工作由ncustom ImageView-Class完成:

public class CustomImageView extends ImageView {
Bitmap bitmapScaled;
Bitmap bitmapOrg;
public CustomImageView (Context context,AttributeSet attr) {
    super(context,attr);
    Resources mRes = context.getResources();
    bitmapOrg = BitmapFactory.decodeResource(mRes, R.drawable.thepng);
    }
@Override
protected void onDraw(Canvas canvas){
    super.onDraw(canvas);
    canvas.drawBitmap(bitmapScaled,0, 0, null);
    }
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    if(bitmapScaled == null)    {
        bitmapScaled = Bitmap.createScaledBitmap(bitmapOrg,getMeasuredWidth(),getMeasuredHeight(),true);
        }
    }
}