我写了一个应用程序,它有一个适合整个屏幕的图像。 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以消除口吃,我该怎么办
答案 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);
}
}
}