gpt4 book ai didi

android - Canvas : trying to draw too large(151099200bytes) bitmap

转载 作者:行者123 更新时间:2023-11-29 02:18:00 32 4
gpt4 key购买 nike

我有一个 Android 应用程序,但它在尝试绘制太大时崩溃了。我查看了 stackoverflow 上发布的类似问题的答案,但没有一个解决方案适合我。所有图像都在各自的文件夹中(见附图)所以我现在不知道是什么导致了崩溃 enter image description here

    2019-11-27 11:22:49.608 10506-10506/com.example.android.tourguide E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android.tourguide, PID: 10506
java.lang.RuntimeException: Canvas: trying to draw too large(151099200bytes) bitmap.
at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:260)
at android.graphics.Canvas.drawBitmap(Canvas.java:1415)
at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:545)
at android.widget.ImageView.onDraw(ImageView.java:1286)
at android.view.View.draw(View.java:17071)
at android.view.View.updateDisplayListIfDirty(View.java:16053)
at android.view.View.draw(View.java:16837)
at android.view.ViewGroup.drawChild(ViewGroup.java:3764)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550)
at android.view.View.updateDisplayListIfDirty(View.java:16048)
at android.view.View.draw(View.java:16837)
at android.view.ViewGroup.drawChild(ViewGroup.java:3764)
at android.widget.ListView.drawChild(ListView.java:3506)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550)
at android.widget.AbsListView.dispatchDraw(AbsListView.java:2635)
at android.widget.ListView.dispatchDraw(ListView.java:3501)
at android.view.View.draw(View.java:17074)
at android.widget.AbsListView.draw(AbsListView.java:4298)
at android.view.View.updateDisplayListIfDirty(View.java:16053)
at android.view.View.draw(View.java:16837)
at android.view.ViewGroup.drawChild(ViewGroup.java:3764)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550)
at android.view.View.draw(View.java:17074)
at androidx.viewpager.widget.ViewPager.draw(ViewPager.java:2426)
at android.view.View.updateDisplayListIfDirty(View.java:16053)
at android.view.View.draw(View.java:16837)
at android.view.ViewGroup.drawChild(ViewGroup.java:3764)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550)
at android.view.View.updateDisplayListIfDirty(View.java:16048)
at android.view.View.draw(View.java:16837)
at android.view.ViewGroup.drawChild(ViewGroup.java:3764)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550)
at android.view.View.updateDisplayListIfDirty(View.java:16048)
at android.view.View.draw(View.java:16837)
at android.view.ViewGroup.drawChild(ViewGroup.java:3764)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550)
at android.view.View.updateDisplayListIfDirty(View.java:16048)
at android.view.View.draw(View.java:16837)
at android.view.ViewGroup.drawChild(ViewGroup.java:3764)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550)
at android.view.View.updateDisplayListIfDirty(View.java:16048)
at android.view.View.draw(View.java:16837)
at android.view.ViewGroup.drawChild(ViewGroup.java:3764)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550)
at android.view.View.updateDisplayListIfDirty(View.java:16048)
at android.view.View.draw(View.java:16837)
at android.view.ViewGroup.drawChild(ViewGroup.java:3764)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550)
at android.view.View.draw(View.java:17074)
at com.android.internal.policy.DecorView.draw(DecorView.java:751)
at android.view.View.updateDisplayListIfDirty(View.java:16053)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:656)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:662)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:770)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2796)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2604)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2211)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1246)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6301)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871)
at android.view.Choreographer.doCallbacks(Choreographer.java:683)
at android.view.Choreographer.doFrame(Choreographer.java:619)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857)
at android.os.Handler.handleCallback(Handler.java:751)
2019-11-27 11:22:49.608 10506-10506/com.example.android.tourguide E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

我在这里使用 ListView:

    public class AttractionsAdapter  extends ArrayAdapter<Attractions> {

public AttractionsAdapter(Context context, ArrayList<Attractions> attractions) {
super(context, 0, attractions);
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Check if an existing view is being reused, otherwise inflate the view
View listView = convertView;
if (listView == null) {
listView = LayoutInflater.from(getContext()).inflate(
R.layout.list_item_layout, parent, false);
}
Attractions currentAttraction = getItem(position);

TextView attractionTextView = listView.findViewById(R.id.attraction_name_view);

attractionTextView.setText(currentAttraction.getName());


// Find the ImageView in the list_item.xml layout with the ID image.
ImageView imageView = (listView.findViewById(R.id.image));

if (currentAttraction.hasImage()) {

imageView.setImageResource(currentAttraction.getImageId());
imageView.setVisibility(View.VISIBLE);
} else {

imageView.setVisibility(View.GONE);
}

return listView;
}

}

和我的 fragment :

public class ClubsFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstances) {
View rootView = inflater.inflate(R.layout.attraction_layout, container, false);

ArrayList<Attractions> attractions = new ArrayList<>();
attractions.add(new Attractions(R.string.club_one, R.drawable.shakers));
attractions.add(new Attractions(R.string.club_two,R.drawable.jojo));
attractions.add(new Attractions(R.string.club_three, R.drawable.maia));
attractions.add(new Attractions(R.string.club_four, R.drawable.great));


AttractionsAdapter adapter = new AttractionsAdapter(getActivity(), attractions);

ListView listView = rootView.findViewById(R.id.list);

listView.setAdapter(adapter);
return rootView;
}

}

和我的布局:

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<RelativeLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_toRightOf="@id/image"
android:orientation="vertical"
android:paddingLeft="16dp">

<TextView
android:id="@+id/attraction_name_view"
android:layout_width="match_parent"
android:layout_height="44dp"
android:layout_weight="1"
android:gravity="top"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="@android:color/white"
tools:text="one" />

<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="16dp" />
</RelativeLayout>

最佳答案

我通过删除我使用的所有超过 2mb 的图像解决了这个问题。现在应用程序不再崩溃。感谢@Bracadabra 和@Vladyslav 的评论。他们帮助我弄清楚出了什么问题以及如何解决它

关于android - Canvas : trying to draw too large(151099200bytes) bitmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59066474/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com