java.lang.OutOfMemoryError的问题

Axton_ 2016-08-21 11:46:22
我想设置开始 动画
当第一次加载完成后 不出现此错误
但是再次点击此APP 就会出现此错误
本人新手 不太懂

public class StartActivity extends AppCompatActivity {
private ImageView start;
private int[] images = {R.drawable.start0, R.drawable.start1, R.drawable.start2, R.drawable.start3, R.drawable.start4, R.drawable.start5};

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//隐藏标题栏 Toolbar
//supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
//隐藏状态栏 高宽都是全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.start_main);
initImage();
}

private void initImage() {
start = (ImageView) findViewById(R.id.startImage);
Random random = new Random();
int index = random.nextInt(images.length);
start.setImageResource(images[index]);
//进行缩放动画
ScaleAnimation scaleAnimation = new ScaleAnimation(1.4f, 1.0f, 1.4f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
scaleAnimation.setDuration(3000);
//动画播放完成后保持形状
scaleAnimation.setFillAfter(true);
scaleAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}

@Override
public void onAnimationEnd(Animation animation) {
finish();
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
}

@Override
public void onAnimationRepeat(Animation animation) {
}
});
start.startAnimation(scaleAnimation);
}

@Override
public void onBackPressed() {
}
}

...全文
233 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Axton_ 2016-08-24
  • 打赏
  • 举报
回复
引用 8 楼 yang1159 的回复:
我以前用到的4张图片做的viewpage 滚动 也是oom , 设置图片采样率后 就可以了
谢谢
Aln_ 2016-08-23
  • 打赏
  • 举报
回复
我以前用到的4张图片做的viewpage 滚动 也是oom , 设置图片采样率后 就可以了
a784063999 2016-08-22
  • 打赏
  • 举报
回复
引用 6 楼 AxtonSun 的回复:
[quote=引用 5 楼 qq_31934293 的回复:] 应该是图片问题,可以先获取Imageview的大小,然后根据imageview的大小设置图片的采样率,这样的话不会使用超过imageview大小的图片,从加载上来说性能也更好。 计算图片采样率的方法: public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { final int width = options.outWidth; final int height = options.outHeight; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { final int heightRatio = Math.round((float) height / (float) reqHeight); final int widthRatio = Math.round((float) width / (float) reqWidth); inSampleSize = heightRatio < widthRatio ? widthRatio : heightRatio; } return inSampleSize; } 计算图片采样率,通过该采样率控制图片大小: BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(pictureName, options); options.inSampleSize = calculateInSampleSize(options, width, height); options.inJustDecodeBounds = false; // Log.d("图片处理", "采样率==" + options.inSampleSize); return BitmapFactory.decodeFile(pictureName, options);
谢谢了 我去试试 但是 private int[] images = {R.drawable.start0, R.drawable.start1, R.drawable.start2, R.drawable.start3}; 你的方法是 BitmapFactory.decodeFile(pictureName, options); 第一个参数为String类型 而 R.drawable.start0 是int 型 如何 将drawable下的图片 采用你这个方法去改变图片的大小呢[/quote] 用這個BitmapFactory.decodeResource();
Axton_ 2016-08-22
  • 打赏
  • 举报
回复
引用 5 楼 qq_31934293 的回复:
应该是图片问题,可以先获取Imageview的大小,然后根据imageview的大小设置图片的采样率,这样的话不会使用超过imageview大小的图片,从加载上来说性能也更好。 计算图片采样率的方法: public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { final int width = options.outWidth; final int height = options.outHeight; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { final int heightRatio = Math.round((float) height / (float) reqHeight); final int widthRatio = Math.round((float) width / (float) reqWidth); inSampleSize = heightRatio < widthRatio ? widthRatio : heightRatio; } return inSampleSize; } 计算图片采样率,通过该采样率控制图片大小: BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(pictureName, options); options.inSampleSize = calculateInSampleSize(options, width, height); options.inJustDecodeBounds = false; // Log.d("图片处理", "采样率==" + options.inSampleSize); return BitmapFactory.decodeFile(pictureName, options);
谢谢了 我去试试 但是 private int[] images = {R.drawable.start0, R.drawable.start1, R.drawable.start2, R.drawable.start3}; 你的方法是 BitmapFactory.decodeFile(pictureName, options); 第一个参数为String类型 而 R.drawable.start0 是int 型 如何 将drawable下的图片 采用你这个方法去改变图片的大小呢
梦境之末lol 2016-08-22
  • 打赏
  • 举报
回复
应该是图片问题,可以先获取Imageview的大小,然后根据imageview的大小设置图片的采样率,这样的话不会使用超过imageview大小的图片,从加载上来说性能也更好。 计算图片采样率的方法: public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { final int width = options.outWidth; final int height = options.outHeight; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { final int heightRatio = Math.round((float) height / (float) reqHeight); final int widthRatio = Math.round((float) width / (float) reqWidth); inSampleSize = heightRatio < widthRatio ? widthRatio : heightRatio; } return inSampleSize; } 计算图片采样率,通过该采样率控制图片大小: BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(pictureName, options); options.inSampleSize = calculateInSampleSize(options, width, height); options.inJustDecodeBounds = false; // Log.d("图片处理", "采样率==" + options.inSampleSize); return BitmapFactory.decodeFile(pictureName, options);
a784063999 2016-08-21
  • 打赏
  • 举报
回复
引用 3 楼 AxtonSun 的回复:
[quote=引用 1 楼 a784063999 的回复:] images裏有圖片太大??
引用 2 楼 qq_35619786 的回复:
图片过大导致的内存溢出?
多少算大 我最大的图片490KB 其余的都是100 200 的[/quote] 我試過用BitmapFactory.decodeResource讀23KB的圖片, 參數沒有設置縮小會出錯
Axton_ 2016-08-21
  • 打赏
  • 举报
回复
引用 1 楼 a784063999 的回复:
images裏有圖片太大??
引用 2 楼 qq_35619786 的回复:
图片过大导致的内存溢出?
多少算大 我最大的图片490KB 其余的都是100 200 的
lucers 2016-08-21
  • 打赏
  • 举报
回复
图片过大导致的内存溢出?
a784063999 2016-08-21
  • 打赏
  • 举报
回复
images裏有圖片太大??

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧