スクロールビューの初期位置を設定しようとしましたが、方法が見つかりませんでした。誰かアイデアはありますか?また、スクロールビューの子としてGoogleMapsフラグメントがあります。
おかげで、
ライアン
はい、それは可能です:
ScrollView.scrollTo(int x, int y);
ScrollView.smoothScrollTo(int x, int y);
ScrollView.smoothScrollBy(int x, int y);
そのために使用できます。 xパラメータとyパラメータは、水平軸と垂直軸でスクロールする座標です。
コードの例:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
ScrollView sv = (ScrollView) findViewById(R.id.scrollView);
sv.scrollTo(0, 100);
}
その例では、Activity
が開始されると、ScrollView
が100ピクセル下にスクロールされます。
delayスクロールプロセスを試すこともできます。
final ScrollView sv = (ScrollView) findViewById(R.id.scrollView);
Handler h = new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
sv.scrollTo(0, 100);
}
}, 250); // 250 ms delay
受け入れられた答えは私のために働いていません。スクロールビューの初期位置を直接設定する方法はありません。
ただし、次のように、スクロールビューを描画する前に初期位置を設定できます。
_rootView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
scrollView.getViewTreeObserver().removeOnPreDrawListener(this);
scrollView.setScrollY(100);
return false;
}
});
_
Handler
内でscrollView.setScrollY(100)
を使用することもできますが、スクロールするとぎくしゃくします。
数時間後、インターネット検索
私のためのこの作品:
ScrollView.post(new Runnable() {
@Override
public void run() {
//setting position here :
ScrollView.scrollTo(X, Y);
}
});
答えはどれもうまくいきませんでした。私のScrollView
は周囲のLinearLayout
の一部です。 ScrollView
の調整を、このLinearLayout
のonDraw()
メソッドに次のように入力します。
@Override
protected void onDraw(Canvas canvas){
if(scrollAdjustTries > 2){
return;
}
scrollAdjustTries++;
mScrollView.scrollTo(0, mModel.scrollLine());
}
非常に醜いが、機能している。
Scrollview sw = (ScrollView) findViewById(R.id.scrollView);
sw.post(new Runnable() {
public void run() {
sw.smoothScrollTo(0, 5000);
}
});
問題は、ScrollViewがレイアウトされる前にそのサイズを知らないことです。解決策は、スクロール位置を保存することですunil onLayoutが呼び出されてから、スクロール位置を設定します。
次に例を示します(kotlin)。
class MyScrollView constructor(context: Context, attrs: AttributeSet) : ScrollView(context, attrs) {
private var hasStartPositionBeenSet = false
var startPosition = 0
override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
super.onLayout(changed, l, t, r, b)
if(!hasStartPositionBeenSet) {
scrollTo(0, startPosition)
hasStartPositionBeenSet = true
}
}
}
class MyActivity: Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
/* ... */
findViewById<MyScrollView>(R.id.scrollView).startPosition = scrollPosition
}
}