Сбой работы галереи?

#android #xml #android-activity

#Android #xml #android-активность

Вопрос:

Другие действия в моем приложении открываются и меняются просто отлично, но по какой-то причине именно этот сбой. Есть идеи, в чем моя проблема?

Это файл класса

     package com.gcomcode.oakgang;

import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;

@SuppressWarnings("deprecation")
public class GalleryActivity extends Activity {
private Gallery gallery;

private ImageView imgView;


private Integer[] Imgid = {

        R.drawable.photo1, R.drawable.photo2, R.drawable.photo3, R.drawable.photo4, R.drawable.photo5, R.drawable.photo6, R.drawable.photo7, R.drawable.photo9,

};


@Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.gallery_activity);


    imgView = (ImageView)findViewById(R.id.ImageView01);

    imgView.setImageResource(Imgid[0]);


     gallery = (Gallery) findViewById(R.id.examplegallery);

     gallery.setAdapter(new AddImgAdp(this));


     gallery.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

            imgView.setImageResource(Imgid[position]);

        }

    });


}


public class AddImgAdp extends BaseAdapter {

    int GalItemBg;

    private Context cont;


    public AddImgAdp(Context c) {

        cont = c;

        TypedArray typArray = obtainStyledAttributes(R.styleable.Gallery1);

        GalItemBg = typArray.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0);

        typArray.recycle();

    }


    public int getCount() {

        return Imgid.length;

    }


    public Object getItem(int position) {

        return position;

    }


    public long getItemId(int position) {

        return position;

    }


    public View getView(int position, View convertView, ViewGroup parent) {

        ImageView imgView = new ImageView(cont);


        imgView.setImageResource(Imgid[position]);

        imgView.setLayoutParams(new Gallery.LayoutParams(80, 70));

        imgView.setScaleType(ImageView.ScaleType.FIT_XY);

        imgView.setBackgroundResource(GalItemBg);


        return imgView;

    }

}


}
  

и это соответствующий .xml

     <?xml version="1.0" encoding="utf-8"?>

<LinearLayout android:id="@ id/LinearLayout01"

android:layout_width="fill_parent" android:layout_height="fill_parent"

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical">

<Gallery 

    android:id="@ id/examplegallery" android:layout_width="fill_parent"

    android:layout_height="wrap_content" />

<ImageView android:id="@ id/ImageView01"

    android:layout_width="wrap_content" android:layout_height="wrap_content"/>

</LinearLayout>
  

Ошибки LogCat:

06-29 21:16:47.914: E / AndroidRuntime(22401): ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основное 06-29 21:16:47.914: E / AndroidRuntime(22401): Процесс: com.gcomcode.oakgang, PID: 22401 06-29 21:16:47.914: E / AndroidRuntime(22401): java.lang.Ошибка OutOfMemoryError 06-29 21:16:47.914: E / AndroidRuntime(22401): на android.graphics.BitmapFactory.nativeDecodeAsset(собственный метод) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:677) 06-29 21:16:47.914: E/ AndroidRuntime(22401): на android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:507) 06-29 21:16:47.914: E / AndroidRuntime(22401): на android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:872) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.content.res.Resources.loadDrawable(Ресурсы.java:3024) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.content.res.Resources.getDrawable(Ресурсы.java:1586) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.widget.ImageView.resolveUri(ImageView.java:648) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.widget.ImageView.setImageResource(ImageView.java:377) 06-29 21:16:47.914: E / AndroidRuntime(22401): в com.gcomcode.oakgang.GalleryActivity$AddImgAdp.getView(GalleryActivity.java:108) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.widget.Gallery.makeAndAddView(Gallery.java:865) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.widget.Gallery.fillToGalleryRightLtr(Gallery.java:819) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.widget.Gallery.fillToGalleryRight(Gallery.java:763) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.widget.Gallery.layout (Gallery.java:672) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.widget.Gallery.onLayout (Gallery.java:357) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.view.View.layout(View.java:15655) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.view.ViewGroup.макет (ViewGroup.java:4856) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.widget.Линейное описание.layoutVertical(LinearLayout.java:1531) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.widget.Линейное описание.onLayout(LinearLayout.java:1440) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.view.View.layout(View.java:15655) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.view.ViewGroup.макет (ViewGroup.java:4856) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.widget.FrameLayout.onLayout (FrameLayout.java:388) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.view.View.layout(View.java:15655) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.view.ViewGroup.макет (ViewGroup.java:4856) 06-29 21:16:47.914: E /AndroidRuntime(22401): в com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:438) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.view.View.layout(View.java:15655) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.view.ViewGroup.макет (ViewGroup.java:4856) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.widget.FrameLayout.onLayout(FrameLayout.java:388) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.view.View.layout(View.java:15655) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.view.ViewGroup.макет (ViewGroup.java:4856) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2282) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2002) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1234) 06-29 21:16:47.914: E/AndroidRuntime(22401): в android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6465) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.view.Хореограф $ CallbackRecord.run(Хореограф.java:803) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.view.Хореограф.doCallbacks (хореограф.java:603) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.view.Хореограф.doFrame (хореограф.java:573) 06-29 21:16:47.914: E / AndroidRuntime(22401): на android.view.Хореограф $FrameDisplayEventReceiver.run (Хореограф.java:789) 06-29 21:16:47.914: E/AndroidRuntime(22401): в android.os.Handler.handleCallback(Handler.java:733) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.os.Handler.DispatchMessage(Handler.java:95) 06-29 21:16:47.914: E/ AndroidRuntime(22401): в android.os.Looper.loop(Looper.java:157) 06-29 21:16:47.914: E / AndroidRuntime(22401): в android.app.ActivityThread.main(ActivityThread.java:5356) 06-29 21:16:47.914: E/ AndroidRuntime(22401): в java.lang.reflect.Метод.invokeNative (собственный метод) 06-29 21:16:47.914: E/ AndroidRuntime(22401): на java.lang.reflect.Метод.invoke(метод.java:515) 06-29 21:16:47.914: E/AndroidRuntime(22401): в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 06-29 21:16:47.914: E / AndroidRuntime (22401): вcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 06-29 21:16:47.914: E/AndroidRuntime(22401): в dalvik.system.NativeStart.main(собственный метод)

Ответ №1:

Это известная проблема (особенность) с изображениями Android. Google покажет вам множество статей на эту тему (изображения Android из памяти). Вы можете найти статью о том, как Android рекомендует решать эту проблему здесь.

Комментарии:

1. Хорошо, спасибо! Это должно быть большим подспорьем!

Ответ №2:

Попробуйте использовать это в файле манифеста внутри тега приложения.

 android:largeHeap="true"