【问题标题】:Android Gallery Transition Between Images图像之间的 Android Gallery 过渡
【发布时间】:2012-01-19 22:59:01
【问题描述】:

我有一个画廊,展示了一些扑克牌的图像。每张卡片间隔 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"
/>

【问题讨论】:

    标签: android image animation gallery transition


    【解决方案1】:

    我认为这是由 Gallery 在幻灯片动画上设置的动画插值器引起的。过冲插值器将导致该行为。

    如果您想覆盖它,我不确定这将是多么容易。我进行了快速搜索,但找不到任何可以让您轻松覆盖图库的默认插值器的东西。我唯一找到的是this post with someone,他似乎成功地创建了一个新的 Gallery 类,该类扩展了 Android Gallery 类以覆盖默认插值器。

    【讨论】:

      【解决方案2】:

      不得不扩展画廊,我认为这个问题与我在屏幕上的计时器有关。这个问题在这里进一步讨论: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);
      }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多