gpt4 book ai didi

java - Android 中的动画性能缓慢

转载 作者:行者123 更新时间:2023-11-30 10:49:47 25 4
gpt4 key购买 nike

添加单个图像 10 次和 10 个不同的图像(相同尺寸,相同分辨率,相同文件大小)一次动画有什么区别吗?

因为我添加了 1 张图像 10 次并提供了多个动画,同时在整个交互过程中滑动它很流畅。但是在为我的过程添加不同的图像(相同的尺寸、相同的分辨率、相同的文件大小)时,动画会严重滞后。我尝试提高性能的一些步骤

1.在动画结束时添加图层类型并设置为空(这改进了一次动画,当动画是连续的时,这没有帮助)

2.尝试在Manifest中设置hardwareaccelerated属性

3.尝试在 list 中设置大堆属性

4.添加了元素的动画缓存。

5.尝试在高 RAM 设备上运行。

我们有任何改进动画性能的选项吗?

已编辑:

FrameLayout frame = new FrameLayout(this);
frame.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 700));
ArrayList<Integer> arrayList = new ArrayList<Integer>();
arrayList.add(R.drawable.image1);
arrayList.add(R.drawable.image2);
arrayList.add(R.drawable.image3);
arrayList.add(R.drawable.image4);
arrayList.add(R.drawable.image5);
arrayList.add(R.drawable.image6);
arrayList.add(R.drawable.image7);
arrayList.add(R.drawable.image8);
arrayList.add(R.drawable.image9);
arrayList.add(R.drawable.image10);
arrayList.add(R.drawable.image11);
for(int i=0;i<11;i++){
ImageView imgvw = new ImageView(this);
imgvw.setImageResource(arrayList.get(i));
imgvw.setLayoutParams(new ActionBar.LayoutParams(250, 400));
imgvw.setScaleType(ImageView.ScaleType.FIT_XY);
imgvw.setX(this.getResources().getDisplayMetrics().widthPixels / 2);
imgvw.setRotationY(-45);
imgvw.setScaleY(0.7f);
frame.addView(imgvw);
}
setContentView(frame);

public boolean onTouchEvent(MotionEvent event) {

switch (event.getActionMasked()){
case MotionEvent.ACTION_DOWN:{
final AnimatorSet animationSet = new AnimatorSet();
for(int i=0;i<frame.getChildCount();i++){
final ImageView vw = (ImageView) frame.getChildAt(i);
// vw.setLayerType(View.LAYER_TYPE_HARDWARE, null);

animationSet.playTogether(
ObjectAnimator.ofFloat(vw, "rotationY", 45),
ObjectAnimator.ofFloat(vw, "scaleY", 0.8f),
ObjectAnimator.ofFloat(vw, "x", 0)
);
animationSet.setDuration(600);
animationSet.setInterpolator(new DecelerateInterpolator(1.5f));
animationSet.start();

animationSet.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {

}

@Override
public void onAnimationEnd(Animator animation) {
// vw.setLayerType(View.LAYER_TYPE_NONE,null);
animationSet.start();
}

@Override
public void onAnimationCancel(Animator animation) {

}

@Override
public void onAnimationRepeat(Animator animation) {
vw.setX(getResources().getDisplayMetrics().widthPixels / 2);
vw.setRotationY(-45);
vw.setScaleY(0.7f);
}
});

}
}
}

最佳答案

希望您为不同的设备分辨率添加相应的特定分辨率图像。

如果在不同的屏幕分辨率下使用相同的图像,那些分辨率较小的设备可能会出现这种延迟

要生成这些图像,您应该从 vector 格式的原始资源开始,并使用以下尺寸比例为每个密度生成图像:

  • xhdpi: 2.0
  • 分辨率:1.5
  • mdpi:1.0(基准)
  • 低密度指数:0.75


更多关于 developer.android wrt 屏幕密度的建议

  • 用于低密度 (ldpi) 屏幕(~120dpi)的 ldpi 资源。
  • mdpi 中等密度 (mdpi) 屏幕 (~160dpi) 的资源。 (这是基线密度。)
  • 高密度 (hdpi) 屏幕 (~240dpi) 的 hdpi 资源。
  • 超高密度 (xhdpi) 屏幕 (~320dpi) 的 xhdpi 资源。
  • xxhdpi 用于超超高密度 (xxhdpi) 屏幕 (~480dpi) 的资源。
  • xxxhdpi 用于超高密度 (xxxhdpi) 使用的资源 (~640dpi)。仅将其用于启动器图标,请参见上面的注释。
  • nodpi 所有密度的资源。这些是与密度无关的资源。无论当前屏幕的密度如何,系统都不会缩放标有此限定符的资源。
  • tvdpi 屏幕资源介于 mdpi 和 hdpi 之间;大约 213dpi。这不被认为是“主要”密度组。它主要用于电视,大多数应用不需要它——提供 mdpi 和 hdpi 资源对大多数应用来说足够了,系统会适本地缩放它们。

关于java - Android 中的动画性能缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35306881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com