2012-09-27 136 views
0

我想用5张图片做Horizo​​ntalScrollView。 我实现了这样的XMLHorizo​​ntalScrollView OutOfMemoryError

<?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> 

和代码是这样的

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的

 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) 
+0

什么尺寸的图像,你要添加? – Michaeldcooney

+0

800 x 850.如果这是原因,我还有什么可以使用,知道该画廊已弃用:P – gabi906

回答

0

你的图像占用太多内存,我有同样的问题和内容固定它,我是跟着导游在这里找到:

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

它包含如何最佳显示位图不会耗尽内存4个教程。它可能有点令人困惑,但它运作得很好。另一方面,如果你想要一个快捷方式,你可以随时在GIMP中手动缩放图像或其他东西。尽管如果用户将为您的应用选择自己的图片,这并不能解决长期的问题。

0

使用较低分辨率的图像,将definatelly工作... 例如图像尺寸
width=320通过height=320width=200通过height=200