【问题标题】:My Created Android App Forceclose我创建的 Android 应用 Forceclose
【发布时间】:2014-08-23 07:00:47
【问题描述】:

所以我有这个 XML 问题是当我打开它时,它会强制我关闭。当我删除一些图像视图时,可以说只有 7 个 XML 中的总图像视图可以工作。知道为什么吗?我不知道为什么当我的 xml 上有更多图像时它不起作用

App3.XML

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/JCBG"
    android:gravity="center"
    android:orientation="vertical">
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:text="Products"
            android:textColor="@color/JCLogo"
            android:textSize="30dp"/>

        <ViewFlipper
            android:id="@+id/fliping"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">

        <!--  The child Views/Layout to flip -->

        <!--  Layout 1 for 1st Screen -->

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:gravity="center_vertical|center_horizontal|center"
                android:orientation="vertical" >

                    <ImageView
                        android:id="@+id/imageView1"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginTop="15dp"
                        android:scaleType="fitXY"
                        android:src="@drawable/gr" />

            </LinearLayout>

             <!--  Layout 2 for 2nd Screen -->

            <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:orientation="vertical">

                    <ImageView
                        android:id="@+id/imageView2"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginTop="15dp"
                        android:scaleType="fitXY"
                        android:src="@drawable/calvitcdetails" />

            </LinearLayout>

             <!--  Layout 3 for 3rd Screen -->

            <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:orientation="vertical">

                    <ImageView
                        android:id="@+id/imageView3"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginTop="15dp"
                        android:scaleType="fitXY"
                        android:src="@drawable/kapedetails"/>

            </LinearLayout>

              <!--  Layout 4 for 4th Screen -->

            <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:orientation="vertical">

                    <ImageView
                        android:id="@+id/imageView4"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginTop="15dp"
                        android:scaleType="fitXY"
                        android:src="@drawable/glutafitdetails"/>

            </LinearLayout>

              <!--  Layout 5 for 5th Screen -->

            <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:orientation="vertical">

                    <ImageView
                        android:id="@+id/imageView5"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginTop="15dp"
                        android:scaleType="fitXY"
                        android:src="@drawable/pgtdetails"/>

            </LinearLayout>


              <!--  Layout 6 for 6th Screen -->

            <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:orientation="vertical">

                    <ImageView
                        android:id="@+id/imageView6"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginTop="15dp"
                        android:scaleType="fitXY"
                        android:src="@drawable/hilifedetails"/>

            </LinearLayout>


                <!--  Layout 7 for 7th Screen -->

            <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:orientation="vertical">

                    <ImageView
                        android:id="@+id/imageView7"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginTop="15dp"
                        android:scaleType="fitXY"
                        android:src="@drawable/organicbarleyjuicedetails"/>

            </LinearLayout>

                <!--  Layout 8 for 8th Screen -->

            <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:orientation="vertical">

                    <ImageView
                        android:id="@+id/imageView8"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginTop="15dp"
                        android:scaleType="fitXY"
                        android:src="@drawable/barleydetails"/>

            </LinearLayout>

             <!--  Layout 9 for 9th Screen -->

            <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:orientation="vertical">

                    <ImageView
                        android:id="@+id/imageView9"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginTop="15dp"
                        android:scaleType="fitXY"
                        android:src="@drawable/spirulinadetails"/>

            </LinearLayout>

              <!--  Layout 10 for 10th Screen -->

            <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:orientation="vertical">

                    <ImageView
                        android:id="@+id/imageView10"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginTop="15dp"
                        android:scaleType="fitXY"
                        android:src="@drawable/omnisoapdetails"/>

            </LinearLayout>


             <!--  Layout 11 for 11th Screen -->

            <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:orientation="vertical">

                    <ImageView
                        android:id="@+id/imageView11"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginTop="15dp"
                        android:scaleType="fitXY"
                        android:src="@drawable/omnipinkishdetails"/>

            </LinearLayout>


            <!--  Layout 12 for 12th Screen -->

            <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:orientation="vertical">

                    <ImageView
                        android:id="@+id/imageView12"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginTop="15dp"
                        android:scaleType="fitXY"
                        android:src="@drawable/omnidaydetails"/>

            </LinearLayout>


            <!--  Layout 13 for 13th Screen -->

            <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:orientation="vertical">

                    <ImageView
                        android:id="@+id/imageView13"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginTop="15dp"
                        android:scaleType="fitXY"
                        android:src="@drawable/omnitonerdetails"/>

            </LinearLayout>


        </ViewFlipper>

</LinearLayout>

Activity3.java

    package com.example.jcw;


import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MotionEvent;
import android.widget.ViewFlipper;

public class activity3 extends Activity 
{

    private ViewFlipper vf;
    private float lastX;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.app3);
    vf = (ViewFlipper) findViewById(R.id.fliping);
    }



    public boolean onTouchEvent(MotionEvent touchevent) {
    switch (touchevent.getAction()) {
    case MotionEvent.ACTION_DOWN: {
    lastX = touchevent.getX();
    break;
    }
    case MotionEvent.ACTION_UP: {
    float currentX = touchevent.getX();
    if (lastX < currentX) {
        if (vf.getDisplayedChild() == 0)
            break;
            vf.setInAnimation(this, R.anim.in_from_left);
            vf.setOutAnimation(this, R.anim.out_to_right);
            vf.showNext();
    }
    if (lastX > currentX) {
        if (vf.getDisplayedChild() == 1)
            break;
            vf.setInAnimation(this, R.anim.in_from_right);
            vf.setOutAnimation(this, R.anim.out_to_left);
            vf.showPrevious();
            }
            break;
            }
        }   
        return false;
}




}

【问题讨论】:

标签: android android-layout android-activity forceclose


【解决方案1】:

ImageView 小部件使用 Bitmaps 消耗大量堆空间。因此,如果您尝试同时加载多个图像,您将获得OutOfMemoryError,这可能在您的 Logcat 中。

如果位图分辨率高于实际显示所需的分辨率,您可以优化加载它们,here 您会找到 Google 的示例如何做到这一点。

如果不是这样,那么您必须以不同的方式设计您的应用程序。

【讨论】:

  • 谢谢!但对不起,我是 android 开发和 java 的新手。我知道我需要调整大小,但是如何使用提供的代码并调用我拥有的图像并自动调整大小。
  • 不要将android:src 设置为ImageView。而是在 Activity 中使用 findViewById() 来获取 ImageView 引用。然后在后台线程中,例如使用AsyncTask,加载调整大小的位图并将它们设置为ImageView 引用的来源。在我的答案中的链接文档下可以找到加载位图和设置 UI 视图示例。
【解决方案2】:

在应用清单中添加: android:largeHeap="true"

【讨论】:

    【解决方案3】:

    您可以将您的&lt;ViewFlipper ... &lt;/ViewFlipper&gt; 更改为此&lt;AdapterViewFlipper /&gt;
    为此,您需要将布局更改为此:

    main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/JCBG"
    android:gravity="center"
    android:orientation="vertical">
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:text="Products"
            android:textColor="@color/JCLogo"
            android:textSize="30dp"/>
    
        <AdapterViewFlipper 
            android:id="@+id/flipper"
            android:layout_width="fill_parent"
            android:layout_height="match_parent"/>
    
    </LinearLayout>  
    

    然后你需要创建新的布局并把下面的代码写进去:

    mLayout.xml

    <LinearLayout
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:gravity="center"
             android:orientation="vertical">
    
             <ImageView
                 android:id="@+id/imageView"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:layout_marginTop="15dp"
                 android:scaleType="fitXY"/>
    
    </LinearLayout>  
    

    在你的主要活动中获得adapterViewFlipper视图集适配器后:

    adapterViewFlipper.setAdapter(new BAdapter(this,yourImageResourceArray));
    

    在此之后您应该创建自定义适配器(例如扩展基本适配器)并在它的获取视图方法中,膨胀 mLayout.xml 和 ImageView 的 findView,然后为其设置您的图像。

    这是您需要的 customAdapter 示例:

     public class Badapter extends BaseAdapter{
    
    Context context;
    ArrayList<Integer> imageResources;
    
    public Badapter(Context context,ArrayList<Integer> imageResources) {
        this.context = context;
        this.imageResources = imageResources;
    }
    
    
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return imageResources.size();
    }
    
    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return imageResources.get(arg0);
    }
    
    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }
    
    @Override
    public View getView(int position, View arg1, ViewGroup arg2) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater
                .inflate(R.layout.mLayout, null, true);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView);
        imageView.setBackgroundResource(imageResources.get(position));
        //if you use view Holder you will save more memory
        return rowView;
    }
    
    }  
    

    如果你这样做,视图将回收并使用更少的内存。
    注意:如果您使用大小超过 50Kb 的图像,在 某些 设备中,您的应用会崩溃。所以您应该使用较小尺寸的图像。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 2015-05-24
      • 2014-03-15
      • 2013-06-15
      相关资源
      最近更新 更多