修改图像分辨率和大小以适应卡片视图属性
Modifying Images resolution and size to fit card view properiries
我的 android 应用程序有一条错误消息,它使用卡片视图和回收视图,我认为分配图像的大小和分辨率有问题,这是错误消息:
D/skia: --- allocation failed for scaled bitmap
D/AndroidRuntime: Shutting down VM
W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x41775898)
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:586)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:439)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:832)
at android.content.res.Resources.loadDrawable(Resources.java:2988)
at android.content.res.Resources.getDrawable(Resources.java:1558)
at android.support.v7.widget.ResourcesWrapper.getDrawable(ResourcesWrapper.java:128)
at android.support.v7.widget.TintResources.getDrawable(TintResources.java:45)
at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:374)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:202)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:190)
at android.support.v7.content.res.AppCompatResources.getDrawable(AppCompatResources.java:100)
at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:73)
at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:81)
at pioneers.safwat.animals.RecyclerAdapterbirdse.onBindViewHolder(RecyclerAdapterbirdse.java:71)
at pioneers.safwat.animals.RecyclerAdapterbirdse.onBindViewHolder(RecyclerAdapterbirdse.java:11)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6310)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6343)
at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5289)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5552)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5394)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5390)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2149)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1533)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1496)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:593)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3537)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3266)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3798)
at android.view.View.layout(View.java:15213)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.support.design.widget.CoordinatorLayout.layoutChild(CoordinatorLayout.java:1167)
at android.support.design.widget.CoordinatorLayout.onLayoutChild(CoordinatorLayout.java:852)
at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:871)
at android.view.View.layout(View.java:15213)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:15213)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:437)
at android.view.View.layout(View.java:15213)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:15213)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
at android.view.View.layout(View.java:15213)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:15213)
at android.vie
I/Process: Sending signal. PID: 30359 SIG: 9
Application terminated.
这是我的卡片布局XML文件:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/card_view"
android:layout_margin="5dp"
card_view:cardBackgroundColor="#81C784"
card_view:cardCornerRadius="12dp"
card_view:cardElevation="3dp"
card_view:contentPadding="4dp"
android:foreground="?selectableItemBackground"
android:clickable="true" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/item_image"
android:scaleType="fitXY"
android:adjustViewBounds="true"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"/>
<TextView
android:layout_marginTop="8dp"
android:id="@+id/item_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center"
android:textSize="16pt"
android:paddingLeft="10dp"
android:layout_below="@+id/item_image"
/>
</RelativeLayout>
</android.support.v7.widget.CardView>
您可能正在内存中加载一个大位图,它发出内存不足异常。
为避免 java.lang.OutOfMemory 异常,请在解码前检查位图的尺寸。
您必须执行以下步骤来处理它 -
- 在内存中加载完整图像的估计内存使用量。
- 您愿意承诺用于加载此图像的内存量
鉴于您的应用程序的任何其他内存要求。
- 目标 ImageView 的尺寸或图像所在的 UI 组件
待载入。
- 当前设备的屏幕尺寸和密度。
从这里找到如何执行上述步骤 - https://developer.android.com/topic/performance/graphics/load-bitmap.html
或者你使用一个图像加载库来为你做这一切。
有很多可用的库:Glide, Picasso, Fresco, UIL
我的 android 应用程序有一条错误消息,它使用卡片视图和回收视图,我认为分配图像的大小和分辨率有问题,这是错误消息:
D/skia: --- allocation failed for scaled bitmap D/AndroidRuntime: Shutting down VM W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x41775898) E/AndroidRuntime: FATAL EXCEPTION: main java.lang.OutOfMemoryError at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:586) at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:439) at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:832) at android.content.res.Resources.loadDrawable(Resources.java:2988) at android.content.res.Resources.getDrawable(Resources.java:1558) at android.support.v7.widget.ResourcesWrapper.getDrawable(ResourcesWrapper.java:128) at android.support.v7.widget.TintResources.getDrawable(TintResources.java:45) at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:374) at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:202) at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:190) at android.support.v7.content.res.AppCompatResources.getDrawable(AppCompatResources.java:100) at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:73) at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:81) at pioneers.safwat.animals.RecyclerAdapterbirdse.onBindViewHolder(RecyclerAdapterbirdse.java:71) at pioneers.safwat.animals.RecyclerAdapterbirdse.onBindViewHolder(RecyclerAdapterbirdse.java:11) at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6310) at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6343) at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5289) at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5552) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5394) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5390) at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2149) at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1533) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1496) at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:593) at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3537) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3266) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3798) at android.view.View.layout(View.java:15213) at android.view.ViewGroup.layout(ViewGroup.java:4793) at android.support.design.widget.CoordinatorLayout.layoutChild(CoordinatorLayout.java:1167) at android.support.design.widget.CoordinatorLayout.onLayoutChild(CoordinatorLayout.java:852) at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:871) at android.view.View.layout(View.java:15213) at android.view.ViewGroup.layout(ViewGroup.java:4793) at android.widget.FrameLayout.onLayout(FrameLayout.java:448) at android.view.View.layout(View.java:15213) at android.view.ViewGroup.layout(ViewGroup.java:4793) at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:437) at android.view.View.layout(View.java:15213) at android.view.ViewGroup.layout(ViewGroup.java:4793) at android.widget.FrameLayout.onLayout(FrameLayout.java:448) at android.view.View.layout(View.java:15213) at android.view.ViewGroup.layout(ViewGroup.java:4793) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531) at android.widget.LinearLayout.onLayout(LinearLayout.java:1440) at android.view.View.layout(View.java:15213) at android.view.ViewGroup.layout(ViewGroup.java:4793) at android.widget.FrameLayout.onLayout(FrameLayout.java:448) at android.view.View.layout(View.java:15213) at android.vie I/Process: Sending signal. PID: 30359 SIG: 9 Application terminated.
这是我的卡片布局XML文件:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/card_view"
android:layout_margin="5dp"
card_view:cardBackgroundColor="#81C784"
card_view:cardCornerRadius="12dp"
card_view:cardElevation="3dp"
card_view:contentPadding="4dp"
android:foreground="?selectableItemBackground"
android:clickable="true" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/item_image"
android:scaleType="fitXY"
android:adjustViewBounds="true"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"/>
<TextView
android:layout_marginTop="8dp"
android:id="@+id/item_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center"
android:textSize="16pt"
android:paddingLeft="10dp"
android:layout_below="@+id/item_image"
/>
</RelativeLayout>
</android.support.v7.widget.CardView>
您可能正在内存中加载一个大位图,它发出内存不足异常。
为避免 java.lang.OutOfMemory 异常,请在解码前检查位图的尺寸。
您必须执行以下步骤来处理它 -
- 在内存中加载完整图像的估计内存使用量。
- 您愿意承诺用于加载此图像的内存量 鉴于您的应用程序的任何其他内存要求。
- 目标 ImageView 的尺寸或图像所在的 UI 组件 待载入。
- 当前设备的屏幕尺寸和密度。
从这里找到如何执行上述步骤 - https://developer.android.com/topic/performance/graphics/load-bitmap.html
或者你使用一个图像加载库来为你做这一切。
有很多可用的库:Glide, Picasso, Fresco, UIL