Android Srollerの使い方
本論文の例では、Android Srollerの使い方を共有しています。参考にしてください。具体的な内容は以下の通りです。
1、scrolltoとSrollBy
Viewクラスは、Viewコンテンツをスクロールするための二つの方法を定義しています。scrollToとscrollBy:
Viewのdraw方法では、次のコードが見られます。
2、computteScrroll
上記のViewのdraw方法の抜粋において、mScrrollXとmScrrollyに対して値を取る前に、computteScrroll方法を呼び出したのを見ました。computteScrroll方法は以下の通りです。
3、Srollerの使用
Scrlerは実際にViewのスクロールを直接操作するのではなく、設定に基づいて現在のX方向とY方向の距離を計算します。Scrlerの一般的な使用ステップ:
1、Srollerを初期化し、補間器を指定することができ、指定しない場合はデフォルトのVicousFuidInterpolatorを使用する。
2、Sroller_Telstrol方法を呼び出して、しばらくの間にXとY方向のスクロールを絶えず計算し始める。
3、お知らせViewリフレッシュ
4、Viewの中でscrollToを通じて本当の転がり操作を実現します。
5、Viewの更新を通知する
ローリング実行が完了する前に、4と5は、scroller.com mputeScroffset()がfalseに戻るまでループし続ける。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
1、scrolltoとSrollBy
Viewクラスは、Viewコンテンツをスクロールするための二つの方法を定義しています。scrollToとscrollBy:
/**
* Set the scrolled position of your view. This will cause a call to
* {@link #onScrollChanged(int, int, int, int)} and the view will be
* invalidated.
* @param x the x position to scroll to
* @param y the y position to scroll to
*/
public void scrollTo(int x, int y) {
if (mScrollX != x || mScrollY != y) {
int oldX = mScrollX;
int oldY = mScrollY;
mScrollX = x;
mScrollY = y;
invalidateParentCaches();
onScrollChanged(mScrollX, mScrollY, oldX, oldY);
if (!awakenScrollBars()) {
postInvalidateOnAnimation();
}
}
}
/**
* Move the scrolled position of your view. This will cause a call to
* {@link #onScrollChanged(int, int, int, int)} and the view will be
* invalidated.
* @param x the amount of pixels to scroll by horizontally
* @param y the amount of pixels to scroll by vertically
*/
public void scrollBy(int x, int y) {
scrollTo(mScrollX + x, mScrollY + y);
}
scrollByによってもたらされるxとyパラメータは、実際にはX方向とY方向のローリング距離の増分であり、最終的にはscrollTo方法を呼び出すことができる。また、scrollTo法では、いくつかのリフレッシュと通知操作が行われており、最も重要なのはmScrrollXとmScrrollyの割り当てである。Viewのdraw方法では、次のコードが見られます。
int sx = 0;
int sy = 0;
if (!drawingWithRenderNode) {
computeScroll();
sx = mScrollX;
sy = mScrollY;
}
...
if (offsetForScroll) {
canvas.translate(mLeft - sx, mTop - sy);
}
つまり、mScrrollXとmScrrollyは最終的にはコンテンツ制作の場所に使われ、そのmLeftとmTop自体はscrollToによって変化していません。scrollToはViewの内容であって、View自体ではない。2、computteScrroll
上記のViewのdraw方法の抜粋において、mScrrollXとmScrrollyに対して値を取る前に、computteScrroll方法を呼び出したのを見ました。computteScrroll方法は以下の通りです。
/**
* Called by a parent to request that a child update its values for mScrollX
* and mScrollY if necessary. This will typically be done if the child is
* animating a scroll using a {@link android.widget.Scroller Scroller}
* object.
*/
public void computeScroll() {
}
コメントによると、computteScrrollの典型的な使い方は、Scrlerと結合して、コンテンツ/バイトポイントを実現するローリングアニメーションを使用することである。3、Srollerの使用
Scrlerは実際にViewのスクロールを直接操作するのではなく、設定に基づいて現在のX方向とY方向の距離を計算します。Scrlerの一般的な使用ステップ:
1、Srollerを初期化し、補間器を指定することができ、指定しない場合はデフォルトのVicousFuidInterpolatorを使用する。
2、Sroller_Telstrol方法を呼び出して、しばらくの間にXとY方向のスクロールを絶えず計算し始める。
3、お知らせViewリフレッシュ
4、Viewの中でscrollToを通じて本当の転がり操作を実現します。
5、Viewの更新を通知する
ローリング実行が完了する前に、4と5は、scroller.com mputeScroffset()がfalseに戻るまでループし続ける。
class ScrollableLinearLayout @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr) {
private val scroller = Scroller(context, BounceInterpolator())
override fun computeScroll() {
if(scroller.computeScrollOffset()) {
//
scrollTo(scroller.currX, scroller.currY)
//
invalidate()
}
}
fun scroll() {
// Scroller startScroll
if(scrollX == 0) {
scroller.startScroll(scrollX, scrollY, /*dx*/ -500, /*dy*/ 0, /*duration*/ 300)
} else {
scroller.startScroll(scrollX, scrollY, 500, 0, 300)
}
//
invalidate()
}
}
xmlレイアウト:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".scroller.activity.ScrollerSampleActivity">
<com.sahooz.customviewdemo.scroller.view.ScrollableLinearLayout
android:id="@+id/sll"
android:layout_width="match_parent"
android:layout_height="200dp"
android:gravity="center_vertical"
android:orientation="vertical"
android:background="#FFAAAA">
<Button
android:id="@+id/btnScroll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Scroll" />
</com.sahooz.customviewdemo.scroller.view.ScrollableLinearLayout>
</LinearLayout>
Activity
class ScrollerSampleActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_scroller_sample)
val btnScroll = findViewById<Button>(R.id.btnScroll)
btnScroll.setOnClickListener {
findViewById<ScrollableLinearLayout>(R.id.sll).scroll()
}
}
}
実行結果:以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。