实现点击Item可让Item跳到屏幕中间的HorizontalScrollView

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现方法如下: 1. 在HorizontalScrollView的布局中,添加一个LinearLayout作为容器,用来存放所有的tab。 2. 设置HorizontalScrollView的属性:android:scrollbars="none",这样就可以隐藏滚动条。 3. 在代码中获取LinearLayout和HorizontalScrollView对象,并获取LinearLayout中的所有子View。 4. 对于点事件,判断点的tab是否在屏幕外,如果在屏幕外则滚动到该tab的位置,否则不做处理。 5. 对于滑动事件,判断滑动方向,如果是向左滑动则判断最后一个tab是否在屏幕外,如果在屏幕外则滚动到该tab的位置,否则不做处理;如果是向右滑动则判断第一个tab是否在屏幕外,如果在屏幕外则滚动到该tab的位置,否则不做处理。 6. 在滚动到tab的位置时,可以使用HorizontalScrollView的smoothScrollTo()方法实现平滑滚动效果。 示例代码: ``` private LinearLayout mTabContainer; private HorizontalScrollView mScrollView; private void initViews() { mScrollView = findViewById(R.id.scroll_view); mTabContainer = findViewById(R.id.tab_container); for (int i = 0; i < 20; i++) { TextView tab = new TextView(this); tab.setText("Tab " + i); tab.setPadding(20, 0, 20, 0); mTabContainer.addView(tab); } mScrollView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { mScrollView.getViewTreeObserver().removeOnGlobalLayoutListener(this); for (int i = 0; i < mTabContainer.getChildCount(); i++) { final View tab = mTabContainer.getChildAt(i); tab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int[] location = new int[2]; tab.getLocationOnScreen(location); int x = location[0]; if (x < 0 || x > mScrollView.getWidth() - tab.getWidth()) { mScrollView.smoothScrollTo(x, 0); } } }); } mScrollView.setOnTouchListener(new View.OnTouchListener() { private float mLastX; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mLastX = event.getX(); break; case MotionEvent.ACTION_MOVE: float x = event.getX(); if (x > mLastX) { // 向右滑动 View firstTab = mTabContainer.getChildAt(0); int[] location = new int[2]; firstTab.getLocationOnScreen(location); int x1 = location[0]; if (x1 < 0) { mScrollView.smoothScrollBy(x1, 0); } } else if (x < mLastX) { // 向左滑动 View lastTab = mTabContainer.getChildAt(mTabContainer.getChildCount() - 1); int[] location = new int[2]; lastTab.getLocationOnScreen(location); int x2 = location[0] + lastTab.getWidth() - mScrollView.getWidth(); if (x2 > 0) { mScrollView.smoothScrollBy(x2, 0); } } mLastX = x; break; } return false; } }); } }); } ``` 在代码中,我们通过获取每个tab的位置,判断其是否在屏幕外,并使用smoothScrollTo()和smoothScrollBy()方法实现滚动效果。同时,我们还通过监听HorizontalScrollView的布局变化事件,在布局完成后为每个tab添加点事件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值