众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单。
本文约6千字,新手阅读需要7分钟,复习需要3分钟 【收藏随时查阅不再迷路】
使用步骤
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<HorizontalScrollView
android:id="@+id/idScrollView"
android:layout_width="560dp"
android:layout_height="200dp"
android:fadingEdge="horizontal"
android:fadingEdgeLength="20dp"
android:isScrollContainer="false"
android:scrollbarAlwaysDrawHorizontalTrack="true"
android:scrollbarDefaultDelayBeforeFade="500"
android:scrollbarFadeDuration="1000"
android:scrollbarSize="6dp"
android:scrollbarThumbHorizontal="@color/color_00ff00"
android:scrollbarTrackHorizontal="@color/color_ff0000"
android:scrollbars="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@mipmap/study_three" />
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@mipmap/study_five" />
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@mipmap/study_one" />
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@mipmap/study_two" />
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@mipmap/study_seven" />
LinearLayout>
HorizontalScrollView>
<ScrollView
android:layout_width="240dp"
android:layout_height="560dp"
android:layout_marginTop="20dp"
android:fadeScrollbars="false"
android:fillViewport="true"
android:scrollbarAlwaysDrawVerticalTrack="true"
android:scrollbarDefaultDelayBeforeFade="3000"
android:scrollbarFadeDuration="2000"
android:scrollbarSize="10dp"
android:scrollbarStyle="outsideOverlay"
android:scrollbarThumbVertical="@color/color_ff0000"
android:scrollbarTrackVertical="@color/color_00ff00"
android:scrollbars="vertical"
android:soundEffectsEnabled="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@mipmap/study_one" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@mipmap/study_two" />
LinearLayout>
ScrollView>
LinearLayout>
class ActivityScrollView :AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_scrollview)
//滚动到底部
idScrollView.fullScroll(ScrollView.FOCUS_DOWN)
//滚动到顶部
idScrollView.fullScroll(ScrollView.FOCUS_UP)
//滑动到指定位置,参数是x值和y值,view左上角为原点
idScrollView.smoothScrollTo(100,100)
}
}
ScrollView默认是没有监听的,但是不妨碍我们继承后自定义onScrollChanged来实现。
Java版
public class ScrollViewCustomJava extends ScrollView {
private OnScrollListener onScrollListener;
public void setOnScrollListener(OnScrollListener onScrollListener) {
this.onScrollListener = onScrollListener;
}
public ScrollViewCustomJava(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (onScrollListener != null) {
//一定要注意着的int值都是像素值,而我们实际用的时候应该是dp,记得自己进行转换
onScrollListener.onScroll(oldl, oldt, l, t);
}
}
interface OnScrollListener {
/**
* 回调坐标值 一般ScrollView只有Y值变化, HorizontalScrollView是x值变化
*
* @param startScrollX 滑动之前的值
* @param startScrollY 滑动之前的值
* @param endScrollX 滑动之后的值
* @param endScrollY 滑动之后的值
*/
void onScroll(int startScrollX, int startScrollY, int endScrollX, int endScrollY);
}
}
Kotlin版
class ScrollViewCustomKotlin(context: Context?, attrs: AttributeSet?) : ScrollView(context, attrs) {
private var onScrollListener: OnScrollListener? = null
fun setOnScrollListener(onScrollListener: OnScrollListener?) {
this.onScrollListener = onScrollListener
}
override fun onScrollChanged(l: Int, t: Int, oldl: Int, oldt: Int) {
super.onScrollChanged(l, t, oldl, oldt)
if (onScrollListener != null) {
//一定要注意着的int值都是像素值,而我们实际用的时候应该是dp,记得自己进行转换
onScrollListener!!.onScroll(oldl, oldt, l, t)
}
}
interface OnScrollListener {
/**
* 回调坐标值 一般ScrollView只有Y值变化, HorizontalScrollView是x值变化
*
* @param startScrollX 滑动之前的值
* @param startScrollY 滑动之前的值
* @param endScrollX 滑动之后的值
* @param endScrollY 滑动之后的值
*/
fun onScroll(startScrollX: Int, startScrollY: Int, endScrollX: Int, endScrollY: Int)
}
}
使用
scrollViewCustomJava.setOnScrollListener { startScrollX, startScrollY, endScrollX, endScrollY ->
{
Log.e("TAG", "打印出数值: $startScrollX$startScrollY$endScrollX$endScrollY");
}
}
除了这个,后来Android更新了NestedScrollview,不仅解决了监听事件,还能嵌套RecyclerView或ListView了。相比ScrollView强大了不少。后面我们会单独讲,在这说下她的滑动事件(Api需要23以上)。
两个监听都一样
idNestedScrollView.setOnScrollChangeListener(object : NestedScrollView.OnScrollChangeListener {
override fun onScrollChange(v: NestedScrollView?, scrollX: Int, scrollY: Int, oldScrollX: Int, oldScrollY: Int) {
//参数一是NestedScrollView对象 、参数二是:scrollX是目前的(滑动后)的X轴坐标 、参数三是:ScrollY是目前的(滑动后)的Y轴坐标 、参数四是:oldScrollX是之前的(滑动前)的X轴坐标 、参数五是:oldScrollY是之前的(滑动前)的Y轴坐标
}
})
idNestedScrollView.setOnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY ->
{
}
}
📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。
温馨提示:点击下方卡片获取更多意想不到的资源。