Странное поведение масштабирования при использовании TouchImageView с определенным телефоном

Не уверен, что здесь происходит, но я реализовал функции масштабирования в галерее изображений в ViewPager, ImagePagerAdapter, используя TouchImageView. На всех моих других телефонах и планшетах код работает отлично, для масштабирования и перелистывания страниц. На 3 наших Motorola Razr масштабирование на первом изображении выглядит забавно. Под забавным я подразумеваю, что когда вы пытаетесь увеличить изображение, ничего не происходит на картинке №1. Но если вы переместитесь к следующему изображению, масштабирование изображения 1 повлияет на изображение 2. Если вы вернетесь к изображению 1, оно все равно не увеличится. Если вы переместитесь к изображению № 3, а затем вернетесь к № 1, первое изображение будет увеличено очень хорошо. Не знаю, как решить эту проблему или даже отладить ее. Я добавил пользовательскую анимацию DepthPageTransformer из примеров в API. Это виновник, но не уверен, что в коде вызывает такое поведение.

import android.annotation.SuppressLint;
import android.support.v4.view.ViewPager.PageTransformer;
import android.view.View;

public class DepthPageTransformer implements PageTransformer {
    private static final float MIN_SCALE = 0.55f;

    // suppress compiler warning...lower Api use standard slide in but 
    // APIs higher than 10 will use the transform page function
    @SuppressLint("NewApi") 
    public void transformPage(View view, float position) {
        int pageWidth = view.getWidth();

        if (position < -1) { // [-Infinity,-1)
            // This page is way off-screen to the left.
            view.setAlpha(0);

        } else if (position <= 0) { // [-1,0]
            // Use the default slide transition when moving to the left page
            view.setAlpha(1);
            view.setTranslationX(0);
            view.setScaleX(1);
            view.setScaleY(1);

        } else if (position <= 1) { // (0,1]
            // Fade the page out.
            view.setAlpha(1 - position);

            // Counteract the default slide transition
            view.setTranslationX(pageWidth * -position);

            // Scale the page down (between MIN_SCALE and 1)
            float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position));
            view.setScaleX(scaleFactor);
            view.setScaleY(scaleFactor);

        } else { // (1,+Infinity]
            // This page is way off-screen to the right.
            view.setAlpha(0);
        }
    }
}



Ответы (1)


Очевидно, анимация вызывала это странное поведение. Не уверен, почему, но пока я не разобрался, мне пришлось удалить настройку этой анимации.

galleryViewPager.setClickable(true);
//galleryViewPager.setAnimation(new DepthPageTransformer());
galleryViewPager.setOnClickListener(new OnClickListener() {...

Теперь анимация броска использует стандарт. Должно быть, Motorola Razr реализует анимацию броска адаптера, которая портит порядок слушателей.

person JPM    schedule 07.01.2014