2012-01-19 9 views
1

私はいくつかのトランプの画像を表示するギャラリーを持っています。各カードは20dpで区切られています。Android Gallery画像間の遷移

1つの画像から次の画像に移動すると、ギャラリーは次の画像をわずかに越えてスクロールし、画像自体に戻ってきます。

もう1つの問題は、ほぼ確実に関連していますが、画像がきれいに見えなくなってスクロールしていないことです。画像が完全な状態にスナップするか、またはビュー全体にスナップして、スクロールしながら手動でスクロールして画像を左右に揺らすように見えています。

何が原因なのでしょうか?ここで

はそれのスクリーンの録音である:ここで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

ギャラリーを拡張する必要がありましたが、問題は画面上にあったタイマーと関係があったと思います。この問題については、ここでさらに説明します。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

私はギャラリーのスライドアニメーションに設定したアニメーション補間によって引き起こされていると思います。オーバーシュート補間器はその動作を引き起こす。

もしあなたがそれを無効にしたいのであれば、私はそれがいかに簡単かわかりません。私はすばやい検索をしましたが、ギャラリーのデフォルトのインターポレータを簡単にオーバーライドできるようなものは見つかりませんでした。私が見つけた唯一の事は、this post with someoneで、デフォルトのインターポレータをオーバーライドするためにAndroid Galleryクラスを拡張する新しいGalleryクラスを作成して成功したようでした。

関連する問題