Android Галерея Переход между изображениями - PullRequest
1 голос
/ 20 января 2012

У меня есть галерея, которая показывает изображения некоторых игральных карт. Каждая карта отделяется 20dp.

Когда я перемещаюсь от одного изображения к другому, галерея немного прокручивается за пределы следующего изображения и впоследствии корректируется обратно к изображению.

Другая проблема, почти наверняка связанная с этим, заключается в том, что изображения не прокручиваются мимо целиком. Похоже, что изображения пытаются либо переместиться в полноэкранный режим, либо полностью исчезнуть из поля зрения, в результате чего при прокрутке вручную выполняется прокрутка изображений в стороны.

Есть идеи, что может быть причиной этого?

Вот запись экрана: http://www.youtube.com/watch?v=Mvj4_48AW5Q&feature=youtu.be

Вот xml для галереи:

<Gallery
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="200dp" 
android:scrollbars="none" 
android:layout_below="@+id/button1" 
android:layout_marginTop="60dp"
android:spacing="20dp" 
android:animationDuration="3000"
/>

Ответы [ 2 ]

2 голосов
/ 27 января 2012

Нужно было расширить галерею, я думаю, что проблема была связана с таймером, который у меня был на экране.Вопрос обсуждается здесь: http://www.unwesen.de/2011/04/17/android-jittery-scrolling-gallery/

import android.content.Context;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Gallery;


public class CustomGallery extends Gallery {

private long mLastScrollEvent;
private float mFlingMultiplier;

public CustomGallery(Context context) {
    super(context);
}
public CustomGallery(Context context, AttributeSet attrs) {
    super(context, attrs);
}
public CustomGallery(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b)
{
  long now = SystemClock.uptimeMillis();
  if (Math.abs(now - mLastScrollEvent) > 500 * mFlingMultiplier) {      
      super.onLayout(changed, l, t, r, b);    
  }
}


@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
    float distanceY)
{
  mLastScrollEvent = SystemClock.uptimeMillis();
  mFlingMultiplier = 1;
  return super.onScroll(e1, e2, distanceX, distanceY);
}



@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    mFlingMultiplier = Math.abs(velocityX/100);
    return super.onFling(e1, e2, velocityX, velocityY);
}

}
2 голосов
/ 20 января 2012

Я думаю, что это вызвано интерполятором анимации, который Галерея устанавливает на анимации слайдов. Интерполятор перерегулирования вызовет такое поведение.

Если вы хотите изменить это, я не уверен, насколько это будет легко. Я сделал быстрый поиск, но не смог найти ничего, что позволило бы вам легко переопределить интерполятор по умолчанию для Галереи. Единственное, что я нашел, было это сообщение с кем-то , который, казалось, добился успеха, создав новый класс Gallery, который расширяет класс Android Gallery для переопределения интерполятора по умолчанию.

...