ImageViewがバックグラウンドであるビューページャーがあります。リソースイメージは750x1205で、私はそれらをdrawable-xhdpiに保ちます。他のサイズの画像はありません。Xamarin Android OutOfMemoryErrorビューページャーの大きな画像
私はいくつかのポイント、OutOfMemoryErrorの
mPagerBackground.SetImageResource(page.backgroundResId);
にスローされた時にページャをスクロールすると、私はAndroidManifestにandroid:largeHeap="true"
を追加し、私もちょうど私のアダプタでSetImageResource
前((BitmapDrawable)mPagerBackground.Drawable).Bitmap.Recycle();
を追加しましたが、それらの非は、問題を解決しています。
画像のサイズを変更せずにこの問題を解決する方法はありますか?
ご協力いただきありがとうございます。
エラー:
Java.Lang.OutOfMemoryError:
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in /Users/builder/data/lanes/3053/a94a03b5/source/mono/external/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143
at Android.Runtime.JNIEnv.CallVoidMethod (IntPtr jobject, IntPtr jmethod, Android.Runtime.JValue* parms) [0x00063] in /Users/builder/data/lanes/3053/a94a03b5/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:571
at Android.Widget.ImageView.SetImageResource (Int32 resId) [0x0005a] in /Users/builder/data/lanes/3053/a94a03b5/source/monodroid/src/Mono.Android/platforms/android-23/src/generated/Android.Widget.ImageView.cs:1350
at [...](Android.Views.ViewGroup container, Int32 position) [0x0012c] in[...] Android.Support.V4.View.PagerAdapter.n_InstantiateItem_Landroid_view_ViewGroup_I (IntPtr jnienv, IntPtr native__this, IntPtr native_container, Int32 position) [0x00011] in <filename unknown>:0
at at (wrapper dynamic-method) System.Object:9d522553-ebab-4c12-bb3c-1791ac15f74a (intptr,intptr,intptr,int)
at --- End of managed exception stack trace ---
at java.lang.OutOfMemoryError
at at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587)
at at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:422)
at at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
at at android.content.res.Resources.loadDrawable(Resources.java:2110)
at at android.content.res.Resources.getDrawable(Resources.java:700)
at at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:323)
at at android.support.v7.widget.TintManager.getDrawable(TintManager.java:175)
at at android.support.v7.widget.TintManager.getDrawable(TintManager.java:168)
at at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:51)
at at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:72)
at at md50e0099531e777fd8d5bed58953e4d813.EscapeLoungesPagerAdapter.n_instantiateItem(Native Method)
at at md50e0099531e777fd8d5bed58953e4d813.EscapeLoungesPagerAdapter.instantiateItem(EscapeLoungesPagerAdapter.java:39)
at at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:870)
at at android.support.v4.view.ViewPager.populate(ViewPager.java:1086)
at at android.support.v4.view.ViewPager.populate(ViewPager.java:952)
at at android.support.v4.view.ViewPager$3.run(ViewPager.java:251)
at at android.support.v4.view.ViewPager.completeScroll(ViewPager.java:1849)
at at android.support.v4.view.ViewPager.onInterceptTouchEvent(ViewPager.java:1978)
at at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1859)
at at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
at at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
at at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
at at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
at at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
at at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
at at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
at at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
at at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
at at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
at at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at at md50e0099531e777fd8d5bed58953e4d813.ResideMenu.n_dispatchTouchEvent(Native Method)
at at md50e0099531e777fd8d5bed58953e4d813.ResideMenu.dispatchTouchEvent(ResideMenu.java:61)
at at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
at at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2068)
at at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1515)
at at android.app.Activity.dispatchTouchEvent(Activity.java:2458)
at at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
at at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
at at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2016)
at at android.view.View.dispatchPointerEvent(View.java:7886)
at at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3954)
at at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3833)
at at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
at at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
at at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
at at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3525)
at at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
at at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3582)
at at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
at at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
at at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
at at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
at at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
at at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5602)
at at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5582)
at at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5553)
at at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5682)
at at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
at at android.os.MessageQueue.nativePollOnce(Native Method)
at at android.os.MessageQueue.next(MessageQueue.java:138)
at at android.os.Looper.loop(Looper.java:123)
at at android.app.ActivityThread.main(ActivityThread.java:5017)
at at java.lang.reflect.Method.invokeNative(Native Method)
at at java.lang.reflect.Method.invoke(Method.java:515)
at at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at at dalvik.system.NativeStart.main(Native Method)
はEDIT:
SushiHangoverによって示唆されるように、私は以下のコードを試してみましたが、それは問題を解決する助けにはなりませんでした。
View view = (View) objectValue;
ImageView imageView = (ImageView)view.FindViewById (Resource.Id.image_id);
Drawable drawable = imageView.Drawable;
if (drawable is BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable)drawable;
if (bitmapDrawable != null) {
Bitmap bitmap = bitmapDrawable.Bitmap;
if (bitmap != null && !bitmap.IsRecycled) {
bitmap.Recycle();
}
}
}
container.RemoveView(view);
有望なのはピカソを使用することですが、画像の読み込みはビューページャーにとって非常に遅いです。
[アンドロイドでSDカードからの眺めページャの拡大イメージを表示]の可能複製(http://stackoverflow.com/questions/20786430/showing-large-images-on-: あなたはこのような何かを行う必要がありますview-pager-from-sdcard-in-android) – SushiHangover
私がリンクしている答えはC#で書かれていませんが、あなたの状況を助けるために簡単に変換することができます。 – SushiHangover