画像付きの水平スクロールビューを使用し、ボタンを使用して画像の異なる場所にスムーズにスクロールしている状況にあります。今、それはうまくいきました私は誰かがとにかく滑らかなスクロール方法を遅くすることを知っていたか、つまりより長いアニメーション時間を持っているのかと思っていましたか?現在、スナップはかなり迅速に行われます。
おそらく、smoothscrollをオーバーライドして、これ/例を検索しようとしましたが、うまくいきませんでした。
だから何かアイデア?
おかげで、
Si
どのように:
ObjectAnimator animator=ObjectAnimator.ofInt(yourHorizontalScrollView, "scrollX",targetXScroll );
animator.setDuration(800);
animator.start();
これは1つの方法で、私にとってはうまくいきます。
new CountDownTimer(2000, 20) {
public void onTick(long millisUntilFinished) {
hv.scrollTo((int) (2000 - millisUntilFinished), 0);
}
public void onFinish() {
}
}.start();
したがって、ここでは、水平スクロールビュー(hv)が2秒で位置0から2000に、または2000pxより小さい場合はビューの最後に移動します。調整が簡単...
HorizontalScrollViewをサブクラス化し、リフレクションを使用してHorizontalScrollViewのプライベートフィールドmScroller
にアクセスします。もちろん、基になるクラスがフィールド名を変更すると、これは壊れます。デフォルトでは、元のスクロール実装に戻ります。
myScroller.startScroll(scrollX, getScrollY(), dx, 0, 500);
を呼び出すと、スクロール速度が変更されます。
private OverScroller myScroller;
private void init()
{
try
{
Class parent = this.getClass();
do
{
parent = parent.getSuperclass();
} while (!parent.getName().equals("Android.widget.HorizontalScrollView"));
Log.i("Scroller", "class: " + parent.getName());
Field field = parent.getDeclaredField("mScroller");
field.setAccessible(true);
myScroller = (OverScroller) field.get(this);
} catch (NoSuchFieldException e)
{
e.printStackTrace();
} catch (IllegalArgumentException e)
{
e.printStackTrace();
} catch (IllegalAccessException e)
{
e.printStackTrace();
}
}
public void customSmoothScrollBy(int dx, int dy)
{
if (myScroller == null)
{
smoothScrollBy(dx, dy);
return;
}
if (getChildCount() == 0)
return;
final int width = getWidth() - getPaddingRight() - getPaddingLeft();
final int right = getChildAt(0).getWidth();
final int maxX = Math.max(0, right - width);
final int scrollX = getScrollX();
dx = Math.max(0, Math.min(scrollX + dx, maxX)) - scrollX;
myScroller.startScroll(scrollX, getScrollY(), dx, 0, 500);
invalidate();
}
public void customSmoothScrollTo(int x, int y)
{
customSmoothScrollBy(x - getScrollX(), y - getScrollY());
}
そのスクローラーは、自動的かつ継続的にスクロールします。画像のリストを連続的にスクロールしてクレジット画面を表示するように作られました。これはあなたを助けるか、あなたにいくつかの考えを与えるかもしれません。
代わりに_.smoothScrollToPositionFromTop
_を使用してください。例
_listView.smoothScrollToPositionFromTop(scroll.pos(),0,scroll.delay());
_
where scroll
は、現在の画面位置を取得するクラスからの単純な変数.get()
は新しい位置.pos()
を返し、スムーズスクロールの時間_.delay
_ ...などを返します