OutOfMemoryError: Usando una imagen que es 1080 * 1920 haga la página de bienvenida

Quiero implementar una página de bienvenida en mi aplicación para Android. Así que en el xml de diseño, hay un imageView y el archivo de imagen es un archivo png que es 1080*1920 , cuando se ejecuta la aplicación, se produce un error OutOfMemoryError , ¿cómo puedo solucionar eso?

El archivo XML:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/welcome1"/> </LinearLayout> 

La información de error:

 04-17 18:40:16.038 29793-29793/cn.test.android E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: cn.test.android, PID: 29793 java.lang.OutOfMemoryError at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:597) at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:432) at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840) at android.content.res.Resources.createFromResourceStream(Resources.java:2477) at android.content.res.Resources.loadDrawable(Resources.java:2136) at android.content.res.MiuiResources.loadDrawable(MiuiResources.java:320) at android.content.res.Resources.getDrawable(Resources.java:710) at android.widget.ImageView.resolveUri(ImageView.java:638) at android.widget.ImageView.setImageResource(ImageView.java:367) at cn.test.android.LandingPageActivity$1.instantiateItem(LandingPageActivity.java:40) at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:837) at android.support.v4.view.ViewPager.populate(ViewPager.java:987) at android.support.v4.view.ViewPager.populate(ViewPager.java:919) at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1441) at android.view.View.measure(View.java:16508) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) at android.view.View.measure(View.java:16508) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at android.view.View.measure(View.java:16508) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) at android.view.View.measure(View.java:16508) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291) at android.view.View.measure(View.java:16508) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1946) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1143) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1325) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1030) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5639) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) at android.view.Choreographer.doCallbacks(Choreographer.java:574) at android.view.Choreographer.doFrame(Choreographer.java:544) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5047) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:806) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622) at dalvik.system.NativeStart.main(Native Method) 

Si tiene welcome1.png en la carpeta welcome1.png , póngalo en el drawable-nodpi .

Esto se debe a que drawable se interpreta como drawable-mdpi , por lo que al cargarlo en un teléfono de mayor densidad, se ampliará (convirtiéndose en un mapa de bits gigantesco).

la memoria asignada a por aplicación es escasa en android no deberías estar dándolo a imágenes como eso.

su aplicación se está agotando la memoria debido a que está recibiendo este error.

 what you can do is increase cahce memory of emulator to support your memory usage. 

así que no es la solución exacta, trate de minimizar la resolución de la imagen y usted puede deshacerse de este error,

Android en general tiene problemas con las imágenes, especialmente las grandes. Esto se debe a la cantidad máxima que una aplicación tiene permitido asignar. Puede volver a muestrear mapas de bits a medida que los carga.

Como un breve ejemplo, esto reducirá a la mitad el tamaño de la imagen:

 final BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inSampleSize = 2; Bitmap bm = BitmapFactory.decodeStream(is, null, opts); 

Trate de reducir su imagen original (manteniendo la relación de aspecto) y que establezca el scaleType en su ImageView ro fitCenter o centerCrop :

 <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitCenter" android:background="@drawable/welcome1"/> 
  • Image uri no muestra imágenes en ImageView en algún dispositivo Android
  • Android: Cómo cargar imagen dinámicamente desde el servidor por su nombre de SQlite
  • Cómo obtener el color de fondo de un ImageView
  • Imageview Roundcorner no funciona para las cuatro esquinas
  • Abra una aplicación de cámara por intención y guardar la imagen en el SD y imageView
  • Problema en OnTouchListener para ImageView
  • Corners ImgeView fit dentro de CardView no tiene radio como las esquinas de CardView en Android
  • Cómo colocar una imagen en la parte superior de otra imagen en android
  • Cómo evitar el método onClick en la parte transparente de un ImageView cargado de PNG
  • Cómo usar el arrastrar correctamente de una vista en android
  • Múltiples animaciones en 1 imageview android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.