Intereting Posts
TimerTask vs Thread.sleep vs Handler postDelayed – наиболее точная функция вызова каждые N миллисекунд? Преобразование элементов списка в одно растровое изображение Что происходит с PendingIntents, когда пользователь обновляет приложение? Html.fromHtml (String) + проблема Linebreak Как разобрать URL-адрес из строки в Android? Как обращаться с java.net.UnknownHostException при использовании модификации Как настроить Android SnackBar на определенную позицию на экране Как создать макет-малую папку? Как создать запрос GreenDao, который загружает все элементы, указанные в списке идентификаторов? Android.database.sqlite.SQLiteCantOpenDatabaseException: неизвестная ошибка (код 14): не удалось открыть базу данных Есть ли способ иметь вложенное числовое поле ввода? ViewPager + FragmentStatePagerAdapter + изменение ориентации Могу ли я повторно подписать .apk с другим сертификатом, чем то, с чем он пришел? Последовательный порт Android через аудиоразъем Android-анимация на экране

ArrayIndexOutOfBoundsException в PhotoView + ViewPager

Я использую библиотеку PhotoView, однако при использовании ее с viewpager я получаю сообщение об ошибке при масштабировании.

08-22 17:14:50.096: E/AndroidRuntime(8740): FATAL EXCEPTION: main 08-22 17:14:50.096: E/AndroidRuntime(8740): java.lang.IllegalArgumentException: pointerIndex out of range 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.MotionEvent.nativeGetAxisValue(Native Method) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.MotionEvent.getX(MotionEvent.java:2148) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.support.v4.view.MotionEventCompatEclair.getX(MotionEventCompatEclair.java:32) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.support.v4.view.MotionEventCompat$EclairMotionEventVersionImpl.getX(MotionEventCompat.java:91) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.support.v4.view.MotionEventCompat.getX(MotionEventCompat.java:219) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.support.v4.view.ViewPager.onInterceptTouchEvent(ViewPager.java:1834) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1909) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2270) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2010) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2270) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2010) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2270) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2010) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2270) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2010) 08-22 17:14:50.096: E/AndroidRuntime(8740): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2182) 08-22 17:14:50.096: E/AndroidRuntime(8740): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1512) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.app.Activity.dispatchTouchEvent(Activity.java:2466) 08-22 17:14:50.096: E/AndroidRuntime(8740): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2130) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.View.dispatchPointerEvent(View.java:7641) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3682) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3613) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4804) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4783) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4875) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:174) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:4854) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:4894) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.Choreographer.doCallbacks(Choreographer.java:562) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.Choreographer.doFrame(Choreographer.java:530) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.os.Handler.handleCallback(Handler.java:725) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.os.Handler.dispatchMessage(Handler.java:92) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.os.Looper.loop(Looper.java:137) 08-22 17:14:50.096: E/AndroidRuntime(8740): at android.app.ActivityThread.main(ActivityThread.java:5328) 08-22 17:14:50.096: E/AndroidRuntime(8740): at java.lang.reflect.Method.invokeNative(Native Method) 08-22 17:14:50.096: E/AndroidRuntime(8740): at java.lang.reflect.Method.invoke(Method.java:511) 08-22 17:14:50.096: E/AndroidRuntime(8740): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 08-22 17:14:50.096: E/AndroidRuntime(8740): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 08-22 17:14:50.096: E/AndroidRuntime(8740): at dalvik.system.NativeStart.main(Native Method) 08-22 17:15:18.416: D/dalvikvm(8872): GC_FOR_ALLOC freed 94K, 14% free 17782K/20656K, paused 13ms, total 13ms 

Хотя масштабирование отлично работает, но когда изображение становится далеко, тогда возникает ошибка, и моя активность падает. Вот мои коды в viewapager:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { pv = new PhotoView(getActivity()); pv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); imageLoader.DisplayImage(mContent, pv); LinearLayout layout = new LinearLayout(getActivity()); layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); layout.setGravity(Gravity.CENTER); layout.addView(pv); return layout; } 

Я искал эту проблему, но не нашел подходящего решения! любое предложение?? Спасибо, парни

Мои коды:

 public class viewpager extends SherlockFragmentActivity { AllPhonesDatabase apd; Bundle gotBasket; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.simple_circles); apd = new AllPhonesDatabase(this.getApplicationContext()).open(); gotBasket = viewpager.this.getIntent().getExtras(); final String imageurl1 = gotBasket.getString("Imageurl1"); final String imageurl2 = gotBasket.getString("Imageurl2"); final String imageurl3 = gotBasket.getString("Imageurl3"); TestFragmentAdapter mAdapter = new TestFragmentAdapter( this.getSupportFragmentManager(), imageurl1, imageurl2, imageurl3); ViewPager mPager = (ViewPager) findViewById(R.id.pager); mPager.setAdapter(mAdapter); CirclePageIndicator mIndicator = (CirclePageIndicator) findViewById(R.id.indicator); mIndicator.setViewPager(mPager); } } class TestFragmentAdapter extends FragmentPagerAdapter { protected static String[] CONTENT; private int mCount; public TestFragmentAdapter(FragmentManager fm, String imageurl1, String imageurl2, String imageurl3) { super(fm); CONTENT = new String[] { imageurl1, imageurl2, imageurl3 }; mCount = CONTENT.length; } @Override public Fragment getItem(int position) { return TestFragment.newInstance(CONTENT[position % CONTENT.length]); } @Override public int getCount() { return mCount; } @Override public CharSequence getPageTitle(int position) { return TestFragmentAdapter.CONTENT[position % CONTENT.length]; } public void setCount(int count) { if (count > 0 && count <= 10) { mCount = count; notifyDataSetChanged(); } } public final class TestFragment extends Fragment { private static final String KEY_CONTENT = "TestFragment:Content"; public ImageLoader2 imageLoader; PhotoView pv; public static TestFragment newInstance(String content) { TestFragment fragment = new TestFragment(); StringBuilder builder = new StringBuilder(); for (int i = 0; i < 1; i++) { builder.append(content).append(" "); } builder.deleteCharAt(builder.length() - 1); fragment.mContent = builder.toString(); return fragment; } private String mContent = "???"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); imageLoader = new com.androidarabia.lazylist.ImageLoader2( this.getActivity()); if ((savedInstanceState != null) && savedInstanceState.containsKey(KEY_CONTENT)) { mContent = savedInstanceState.getString(KEY_CONTENT); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { pv = new PhotoView(getActivity()); pv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); imageLoader.DisplayImage(mContent, pv); LinearLayout layout = new LinearLayout(getActivity()); layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); layout.setGravity(Gravity.CENTER); layout.addView(pv); return layout; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(KEY_CONTENT, mContent); } 

Solutions Collecting From Web of "ArrayIndexOutOfBoundsException в PhotoView + ViewPager"

Кажется, что ошибка там, где вдоль линий. Я не уверен, что это на стороне PhotoViewer или на стороне андроидов. Я работал над этой проблемой, используя этот код в своем собственном представлении пейджера:

 public class HackyViewPager extends ViewPager { public HackyViewPager(Context context) { super(context); } public HackyViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { try { return super.onInterceptTouchEvent(ev); } catch (IllegalArgumentException e) { } catch (ArrayIndexOutOfBoundsException e) { } return false; } } 

У меня не было проблем с использованием этого кода, и масштабирование и масштабирование, похоже, работают нормально. Создайте этот класс в исходном коде, а затем вы можете ссылаться на него в ваших XML-файлах следующим образом:

 <my.default.package.HackyViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="wrap_content" /> 

Может быть, вы должны проверить, похоже ли это на предыдущий вопрос. Java.lang.IllegalArgumentException: pointerIndex вне диапазона Исключение – dispatchTouchEvent

Очевидно, что я согласен с пейджером хакерского вида, но я предполагаю, что для безупречной реализации нужно использовать photoViewAttacher.update () после каждого изменения ресурса изображения, как и в случае успеха, прослушиватели ошибок соответствующей библиотеки загрузки изображений, используемые