首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HorizontalScrollView OutOfMemoryError

HorizontalScrollView OutOfMemoryError
EN

Stack Overflow用户
提问于 2012-09-27 22:36:38
回答 2查看 661关注 0票数 0

我正在试着做一个有5张图片的HorizontalScrollView。我像这样实现了xml

代码语言:javascript
复制
  <?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/gallery"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:spacing="40dp"
        android:scrollbars="horizontal"
        android:fadeScrollbars="false"
        android:layout_marginBottom="50dp">

<LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:background="@drawable/background"/>

</HorizontalScrollView>

代码是这样的

代码语言:javascript
复制
package com.infobest.praiser.activity;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.infobest.praiser.R;
import com.infobest.praiser.actionbar.ActionBarActivity;

public class TutorialActivity extends ActionBarActivity
{
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tutorial);
        Integer[] mImageIds = {R.drawable.tutorial1, R.drawable.tutorial2, R.drawable.tutorial3,
            R.drawable.tutorial4, R.drawable.tutorial5};
        HorizontalScrollView h = (HorizontalScrollView) this.findViewById(R.id.gallery);
        LinearLayout topLinearLayout = new LinearLayout(this);
        topLinearLayout.setOrientation(LinearLayout.HORIZONTAL);


        for (int i = 0; i < 5; i++)
        {
            final ImageView imageView = new ImageView(this);

            imageView.setImageResource(mImageIds[i]);
            topLinearLayout.addView(imageView);

        }
        h.addView(topLinearLayout);


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.menu_tutorial, menu);

        // Calling super after populating the menu is necessary here to ensure
        // that the
        // action bar helpers have a chance to handle this event.
        return super.onCreateOptionsMenu(menu);
    }


}

我到底做错了什么,因为我得到了OutOfMemoryError

LogCat

代码语言:javascript
复制
      FATAL EXCEPTION: main  java.lang.OutOfMemoryError     at
 android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)    at
 android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:483) 
    at
 android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:351)
    at
 android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:773)
    at android.content.res.Resources.loadDrawable(Resources.java:1937) 
    at android.content.res.Resources.getDrawable(Resources.java:664)    at
 android.widget.ImageView.resolveUri(ImageView.java:542)    at
 android.widget.ImageView.setImageResource(ImageView.java:315)      at
 com.infobest.praiser.activity.TutorialActivity.onCreate(TutorialActivity.java:30)
    at android.app.Activity.performCreate(Activity.java:4465)   at
 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
    at
 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
    at
 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
    at android.app.ActivityThread.access$600(ActivityThread.java:122) 
    at
 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
    at android.os.Handler.dispatchMessage(Handler.java:99)      at
 android.os.Looper.loop(Looper.java:137)    at
 android.app.ActivityThread.main(ActivityThread.java:4340)      at
 java.lang.reflect.Method.invokeNative(Native Method)   at
 java.lang.reflect.Method.invoke(Method.java:511)   at
 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)     at
 dalvik.system.NativeStart.main(Native Method)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-28 22:36:21

你的图片占用了太多的内存,我也遇到了同样的问题,解决这个问题的方法是遵循这里的指南:

http://developer.android.com/training/displaying-bitmaps/index.html

它包含4个教程,介绍如何在不耗尽内存的情况下以最佳方式显示位图。它可能有点令人困惑,但它真的很好用。

另一方面,如果你想要一个快捷方式,你可以在GIMP或其他地方手动缩小你的图像。虽然这不会解决长期问题,如果用户将选择自己的图片为您的应用程序。

票数 0
EN

Stack Overflow用户

发布于 2012-12-29 17:21:54

使用较低分辨率的图像,这将肯定会工作。例如图像尺寸

width=320 by height=320width=200 by height=200

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12623874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档