当前位置:   article > 正文

自定义view--仿照 体育app,股票,基金,电商,区块链APP 数据信息栏展示_recyclerview 实现期货 股票

recyclerview 实现期货 股票

我是个球迷,喜欢看各种篮球 足球比赛,所以手机里面也安装了各种体育类APP,之前就发现了一个有趣的自定义view,很多场景都能通用 比如:

(虎扑)体育app,球队积分/比赛数据自定view

股票,基金,区块链页面等

下面上图

以上是别人APP的效果图,下面我把我写的demo的效果图放出来

从现在来看,这2个是可以一起联动的,当然,如果你根据你的需要,也是可以不设置联动

核心代码 

  1. leftRecycler.addOnScrollListener(new RecyclerView.OnScrollListener() {
  2. @Override
  3. public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
  4. super.onScrollStateChanged(recyclerView, newState);
  5. }
  6. @Override
  7. public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
  8. super.onScrolled(recyclerView, dx, dy);
  9. if (RecyclerView.SCROLL_STATE_IDLE != recyclerView.getScrollState()) {
  10. rightRecycler.scrollBy(dx, dy);
  11. }
  12. }
  13. });
  14. rightRecycler.addOnScrollListener(new RecyclerView.OnScrollListener() {
  15. @Override
  16. public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
  17. super.onScrollStateChanged(recyclerView, newState);
  18. }
  19. @Override
  20. public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
  21. super.onScrolled(recyclerView, dx, dy);
  22. if (RecyclerView.SCROLL_STATE_IDLE != recyclerView.getScrollState()) {
  23. leftRecycler.scrollBy(dx, dy);
  24. }
  25. }
  26. });

思路分析

1.根据虎扑的效果图可以看到,该页面主要是一个大列表(2个小列表)

2.头部的tab栏可以水平滑动,或者整体水平滑动,所以父布局用 HorizontalScrollView 实现;

3.列表 Item 分1部分 ,这里我用的是一排数据结果,所谓的各项分数

4.头部 Tab 栏水平滑动时,列表 Item 同步滑动;

5.ScrollView  跟 RecyclerView滑动冲突了

代码部分

1、自定义横向滚动控件

  • 因为上面已经分析,头部 Tab 栏父布局和 item 第二部分同步滑动,所以都采用横向滚动控件完成,所以自定义横向滚动控件,继承 HorizontalScrollView 并重写构造方法,这里重写了 3 个构造方法。
  1. /**
  2. * 自定义横向滚动控件
  3. * 重载了 onScrollChanged方法,监听每次的变化
  4. */
  5. public class CustomHScrollView extends HorizontalScrollView {
  6. ScrollViewObserver mScrollViewObserver = new ScrollViewObserver();
  7. public CustomHScrollView(Context context) {
  8. super(context);
  9. }
  10. public CustomHScrollView(Context context, AttributeSet attrs) {
  11. super(context, attrs);
  12. }
  13. public CustomHScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
  14. super(context, attrs, defStyleAttr);
  15. }
  16. }
  • 定义外部可回调接口,当发生了滚动事件时接口,供外部访问
  1. public static interface OnScrollChangedListener {
  2. public void onScrollChanged(int l, int t, int oldl, int oldt);
  3. }
  • 定义一个观察者,用于滑动控件时,接收水平滑动的回调。并定义添加滚动监听和移除滚动监听的方法。
  1. /*
  2. * 滚动观察者
  3. */
  4. public static class ScrollViewObserver {
  5. List<OnScrollChangedListener> mChangedListeners;
  6. public ScrollViewObserver() {
  7. super();
  8. mChangedListeners = new ArrayList<OnScrollChangedListener>();
  9. }
  10. //添加滚动事件监听
  11. public void AddOnScrollChangedListener(OnScrollChangedListener listener) {
  12. mChangedListeners.add(listener);
  13. }
  14. //移除滚动事件监听
  15. public void RemoveOnScrollChangedListener(OnScrollChangedListener listener) {
  16. mChangedListeners.remove(listener);
  17. }
  18. //回调
  19. public void NotifyOnScrollChanged(int l, int t, int oldl, int oldt) {
  20. if (mChangedListeners == null || mChangedListeners.size() == 0) {
  21. return;
  22. }
  23. for (int i = 0; i < mChangedListeners.size(); i++) {
  24. if (mChangedListeners.get(i) != null) {
  25. mChangedListeners.get(i).onScrollChanged(l, t, oldl, oldt);
  26. }
  27. }
  28. }
  29. }
  • 因为父布局是水平滚动 HorizontalScrollView,所以需要重写 onScrollChanged()方法,监听滑动变化。当观察者 mScrollViewObserver 不为 null 时,滑动监听通知回调观察者 ScrollViewObserver。
  1. @Override
  2. protected void onScrollChanged(int l, int t, int oldl, int oldt) {
  3. //滚动时通知
  4. if (mScrollViewObserver != null) {
  5. mScrollViewObserver.NotifyOnScrollChanged(l, t, oldl, oldt);
  6. }
  7. super.onScrollChanged(l, t, oldl, oldt);
  8. }

以上水平滚动 HorizontalScrollView 基本上已经完成,上面预留外部访问接口:OnScrollChangedListener,在 Tab 栏水平滑动时,可以在 Adapter 中获取滚动水平、垂直滚动位置,来设置 item 中第二部分控件位置。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号