百度上有很多滴 一查就查到了
我只是开发的时候遇见了 就写下来 省着忘记了
不过既然都写了 就记录的全一点 如果看到的人有自己的想法可以私信我
白话文来讲 你点击某一个控件 想要滑动到下面的某块区域
使用 Scrollview 当然不是唯一的答案,但是绝对是最简单的答案
首先 分为两种情况
-属于 Scrollview 的子条目 (这个时候 最好用 LinearLayout 嵌套一下布局)
布局
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/dp_100"
android:gravity="center"
android:background="@color/black"/>
<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/dp_100"
android:gravity="center"
android:background="@color/black"/>
<TextView
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_100"
android:gravity="center"
android:text="textview1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/dp_100"
android:gravity="center"
android:background="@color/black"/>
<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/dp_100"
android:gravity="center"
android:background="@color/black"/>
<TextView
android:id="@+id/text2"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_100"
android:gravity="center"
android:text="textview2"/>
<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/dp_100"
android:gravity="center"
android:background="@color/black"/>
<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/dp_100"
android:gravity="center"
android:background="@color/black"/>
<TextView
android:id="@+id/text3"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_100"
android:gravity="center"
android:text="textview3"/>
<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/dp_100"
android:gravity="center"
android:background="@color/black"/>
<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/dp_100"
android:gravity="center"
android:background="@color/black"/>
<TextView
android:id="@+id/text4"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_100"
android:gravity="center"
android:text="textview4"/>
</LinearLayout>
</ScrollView>
这里为了能更好的看到了效果 所以中间穿插的很多 TextView
代码
计算滑动距离
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
top1 = text1.getTop(); //滑动到textview1需要的距离
top2 = text2.getTop(); //滑动到textview2需要的距离
top3 = text3.getTop(); //滑动到textview3需要的距离
top4 = text4.getTop(); //滑动到textview4需要的距离
}
滑动到对应位置
l1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
scrollView.smoothScrollTo(0, top1);
}
});
l2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
scrollView.smoothScrollTo(0, top2);
}
});
l3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
scrollView.smoothScrollTo(0, top3);
}
});
l4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
scrollView.smoothScrollTo(0, top4);
}
});
smoothScrollTo()的第二个参数代表要滚动到的位置,top为滚动到指定view的顶部,还可以滚动到bottom
scrollTo()使用同上 只不过这个是瞬间完成 而上边的缓慢的完成
-不是Scrollview的子view,会复杂一点
//注意使用 getLocationInWindow 还是 getLocationOnScreen 需要看情况而定
int[] ln= new int[2];
view.getLocationInWindow(ln); `
int position = location[1] - title.getHeight();
if (position< 0) {
position= 0;
}
scrollview.smoothScrollTo(0,position);
// 获取v在当前窗口内的绝对坐标
view.getLocationInWindow();
// 获取在整个屏幕内的绝对坐标,注意这个值是要从屏幕顶端算起,也就是包括了通知栏的高度。
view.getLocationOnScreen();
还有一个就是滑动到顶部 和滑动到底部了
滚到到底部:
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
滚动到顶部:
scrollView.fullScroll(ScrollView.FOCUS_UP);
网友评论