-1

私はViewPagerスワイプ画像を持つ単純なアンドロイドアプリケーションに取り組んでいます。12 個の画像を含む静的アプリケーションがあります。スワイプすると、4 番目の画像の後でアプリがクラッシュします。

スタックトレースを理解し、この問題を解決するにはどうすればよいですか?

e.. 05-24 21:37:25.718: E/AndroidRuntime(551): FATAL EXCEPTION: main 05-24 21:37:25.718: E/AndroidRuntime(551):

java.lang.OutOfMemoryError 05-24 21:37:25.718: E/AndroidRuntime(551): android.graphics.BitmapFactory.nativeDecodeAsset(ネイティブ メソッド) 05-24 21:37:25.718: E/AndroidRuntime(551): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:483) 05-24 21:37:25.718: E/AndroidRuntime(551): android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:351) 05-24 21: 37:25.718: E/AndroidRuntime(551): android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:773) 05-24 21:37:25.718: E/AndroidRuntime(551): android.content.res で.Resources.loadDrawable(Resources.java:1935) 05-24 21:37:25.718: E/AndroidRuntime(551): android.content.res.Resources.getDrawable(Resources.java:664) 05-24 21:37 :25.718: E/AndroidRuntime(551): android.widget.ImageView.resolveUri(ImageView.java:542) 05-24 21:37:25.718: E/AndroidRuntime(551): android.widget.ImageView.setImageResource(ImageView.java:315) 05-24 21:37:25.718: E/AndroidRuntime(551): at com.sqisland.android.swipe_image_viewer.MainActivity$ImagePagerAdapter.instantiateItem(MainActivity.java:72) 05-24 21:37:25.718: E/AndroidRuntime(551): android.support.v4.view.ViewPager.addNewItem(ViewPager) で.java:692) 05-24 21:37:25.718: E/AndroidRuntime(551): android.support.v4.view.ViewPager.populate(ViewPager.java:875) 05-24 21:37:25.718: E /AndroidRuntime(551): android.support.v4.view.ViewPager.populate(ViewPager.java:772) 05-24 21:37:25.718: E/AndroidRuntime(551): android.support.v4.view で。 ViewPager.completeScroll(ViewPager.java:1539) 05-24 21:37:25.718: E/AndroidRuntime(551): android.support.v4.view.ViewPager.computeScroll(ViewPager.java:1422) 05-24 21:37:25.718: E/AndroidRuntime(551): android.view.ViewGroup.drawChild(ViewGroup.java:2729) 05-24 21:37:25.718: E/AndroidRuntime(551) : android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489) 05-24 21:37:25.718: E/AndroidRuntime(551): android.view.ViewGroup.drawChild(ViewGroup.java:2885) 05-24 21:37:25.718: E/AndroidRuntime(551): android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489) 05-24 21:37:25.718: E/AndroidRuntime(551): android.view.ViewGroup で.drawChild(ViewGroup.java:2885) 05-24 21:37:25.718: E/AndroidRuntime(551): android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489) 05-24 21:37:25.718: E /AndroidRuntime(551): android.view.View.draw(View.java:10981) 05-24 21:37:25.718: E/AndroidRuntime(551): android.widget.FrameLayout.draw(FrameLayout.java:450) 05-24 21:37:25.718: E/AndroidRuntime(551): com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2126) 05-24 21:37:25.718: E/AndroidRuntime(551): android.view.ViewRootImpl.draw(ViewRootImpl.java:2026) 05-24 21:37:25.718: E/AndroidRuntime(551): android.view.ViewRootImpl.performTraversals(ViewRootImpl.java) :1634) 05-24 21:37:25.718: E/AndroidRuntime(551): android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442) 05-24 21:37:25.718: E/AndroidRuntime(551): android.os.Handler.dispatchMessage(Handler.java:99) 05-24 21:37:25.718: E/AndroidRuntime(551): android.os.Looper.loop(Looper.java:137) 05-24 21 :37:25.718: E/AndroidRuntime(551): android.app.ActivityThread.main(ActivityThread.java:4424) 05-24 21:37:25.718: E/AndroidRuntime(551): java.lang.reflect で。Method.invokeNative(ネイティブ メソッド) 05-24 21:37:25.718: E/AndroidRuntime(551): java.lang.reflect.Method.invoke(Method.java:511) 05-24 21:37:25.718: E /AndroidRuntime(551): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 05-24 21:37:25.718: E/AndroidRuntime(551): com.android.internal. os.ZygoteInit.main(ZygoteInit.java:551) 05-24 21:37:25.718: E/AndroidRuntime(551): dalvik.system.NativeStart.main(ネイティブ メソッド) で551) 05-24 21:37:25.718: E/AndroidRuntime (551): dalvik.system.NativeStart.main (ネイティブ メソッド) で551) 05-24 21:37:25.718: E/AndroidRuntime (551): dalvik.system.NativeStart.main (ネイティブ メソッド) で

4

3 に答える 3

0

ViewPager アダプターは一度にすべての画像をロードするため、エラーが発生しました。では、実際の理由は次のとおりです。1. 画像サイズが非常に大きい 2. 画像リソースを適切に使用していません。異なるサイズの画像を、ldpi、hdpi、xdpi フォルダーなどの別のフォルダーに配置してみてください。上記のトリックを使用してみてください。それでもエラーが発生する場合は、次の手順に従ってください。

  1. FragmentPagerAdapter を FragmentStatePagerAdapter に変更します。これは、FragmentPagerAdapter がメモリにロードしたすべてのビューを永久に保持するためです。FragmentStatePagerAdapter が、現在のトラバース可能なビューの外にあるビューを破棄する場所。

  2. アダプター メソッド getItemPosition をオーバーライドします (以下を参照)。mAdapter.notifyDataSetChanged(); を呼び出すと、ViewPager はアダプタに問い合わせて、配置に関して何が変更されたかを判断します。このメソッドを使用して、すべてが変更されたため、すべてのビューの配置を再処理します。実際の答えはここにあります: Android の ViewPager から Fragment Page を削除する

于 2013-05-24T19:49:00.227 に答える
0

デバイスが処理できない非常に大きなサイズの画像を使用しているようです。いくつかの小さいサイズを使用してみてください

于 2013-05-24T19:24:48.567 に答える
0

FragmentPagerAdapter を FragmentStatePagerAdapter に変更しました。ただし、スワイプの動きはかなり鈍いです。とりあえず問題は解決したようです。

/**
 * The {@link android.support.v4.view.PagerAdapter} that will provide
 * fragments for each of the sections. We use a
 * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which
 * will keep every loaded fragment in memory. If this becomes too memory
 * intensive, it may be best to switch to a
 * {@link android.support.v4.app.FragmentStatePagerAdapter}.
 */

詳細なチュートリアルは、http://blog.kerul.net/2013/09/adding-xml-layout-in-swipe-views.htmlから入手できます。

于 2013-09-25T12:57:50.127 に答える