2017-02-26 28 views
0

我从我的android应用程序使用卡片视图和回收视图的错误消息,我认为分配图像的大小和分辨率的问题,这是错误消息:修改图片的分辨率和尺寸以适应卡片查看次数

d/Skia的:---分配失败了缩放的位图 d/AndroidRuntime:关闭VM W/dalvikvm:线程ID = 1:未捕获的异常(组= 0x41775898) E/AndroidRuntime线程退出:致命例外:main java.lang.OutOfMemoryError at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 在android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:586) 在android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:439) 在android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:832) (android.content.resources.getDrawable(Resources.java:1558) at android.support.v7.widget.ResourcesWrapper.getDrawable()在android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:374) 上的android.support.v7.widget.TintResources.getDrawable(TintResources.java:45) (参见ResourcesWrapper.java:128) 。 support.v7.widget.AppCompatDrawableManag er.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.su在android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:593) at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(())上的pport.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1496) 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) 在android.view.ViewGroup.layout(ViewGroup.java:4793) 在android.support.design.widget.CoordinatorLayout.layoutChild(CoordinatorLayout.java:1167) 在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。在Android.view.View.layout(View.java:15213) at android.view.ViewGroup.layout(android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:437) (java:4793) ViewGroup.java:4793) at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 在android.view.View.layout(View.java:15213) 在android.view.ViewGroup.layout(ViewGroup.java:4793) 在android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677) 在android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531) 在android.widget.LinearLayout.onLayout(LinearLayout.java:1440) 在android.view.View.layout(View.java:15213) 在机器人。 view.ViewGroup.layout(ViewGroup.java:4793) 在android.widget.FrameLayout.onLayout(FrameLayout.java:448) 在android.view.View.layout(View.java:15213) 在android.vie 我/过程:发送信号。 PID:30359 SIG:9 应用程序已终止。

这是我的名片布局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> 

回答

0

你可能会加载在内存中的大位图,它给内存溢出异常。

要避免java.lang.OutOfMemory异常,请在解码之前检查位图的尺寸。

您有以下步骤执行来处理它 - 在内存中加载整个图像的

  • 估计内存使用情况。
  • 您愿意承诺的内存容量加载此图像 给定您的应用程序的任何其他内存要求。
  • 要加载的图像为 的目标ImageView或UI组件的尺寸。
  • 当前设备的屏幕大小和密度。

找到如何做上面的步骤从这里开始 - https://developer.android.com/topic/performance/graphics/load-bitmap.html
或者你使用的图像加载库,所有的这一切为您服务。
有许多库:GlidePicassoFresco,​​

+0

我不能定义getResources()内onBindViewHolder: –

+0

的功能是:公共无效onBindViewHolder(ViewHolder viewHolder,int i)以{ viewHolder.itemTitle .setText(标题[1]); viewHolder.itemImage.setImageResource(images [i]); viewHolder.itemImage.setImageBitmap( decodeSampledBitmapFromResource(getResources(),R.id.item_image,200,200)); } –