您好,欢迎来到源码搜藏!分享精神,快乐你我!提示:担心找不到本站?在百度搜索“源码搜藏”,网址永远不丢失!
  • 首 页
  • 在线工具
  • 当前位置:首页 > 安卓源码 > 技术博客 >

    Android实现一个类似股票列表联动的功能

    时间:2016-12-04 12:09 来源:互联网 作者:源码搜藏 浏览:收藏 挑错 推荐 打印

    一看也许会觉得很困难,上手之后逻辑还是很简单的。 1. 首先上下滚动通过 scrollview 实现控制左右两侧同时滚动 , 右侧 listview 通过重写 HorizontalScrollView 实现右侧的标题部分跟内容能够同时联动 下面是布局文件 [代码]xml代码: ? 001 002 003 004 00

    一看也许会觉得很困难,上手之后逻辑还是很简单的。

    1.首先上下滚动通过scrollview实现控制左右两侧同时滚动,右侧listview通过重写HorizontalScrollView实现右侧的标题部分跟内容能够同时联动
    Android实现一个类似股票列表联动的功能

    下面是布局文件

    [代码]xml代码:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
     
        <!-- 此部分是标题部分 -->
     
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
     
            <!-- 左侧标题的父容器 -->
     
            <LinearLayout
                android:id="@+id/left_title_container"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="3"
                android:orientation="vertical" >
     
                <include layout="@layout/layout_left_title" />
            </LinearLayout>
     
            <!-- 右侧标题的父容器可实现水平滚动 -->
     
            <com.thea.guo.leftrightscrool.view.SyncHorizontalScrollView
                android:id="@+id/title_horsv"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:scrollbars="@null" >
     
                <LinearLayout
                    android:id="@+id/right_title_container"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal" >
     
                    <include layout="@layout/layout_right_tab" />
                </LinearLayout>
            </com.thea.guo.leftrightscrool.view.SyncHorizontalScrollView>
        </LinearLayout>
     
        <!-- 此部分是内容部分 用ScrollView实现上下滚动效果 -->
     
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
     
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent" >
     
                <!-- 左侧内容的父容器 -->
     
                <LinearLayout
                    android:id="@+id/left_container"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="3"
                    android:gravity="center_vertical"
                    android:orientation="vertical" >
     
                    <ListView
                        android:id="@+id/left_container_listview"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent" >
                    </ListView>
                </LinearLayout>
     
                <!-- 右侧内容的父容器 实现水平滚动 -->
     
                <com.thea.guo.leftrightscrool.view.SyncHorizontalScrollView
                    android:id="@+id/content_horsv"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:scrollbars="@null" >
     
                    <LinearLayout
                        android:id="@+id/right_container"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:gravity="center_vertical"
                        android:orientation="horizontal" >
     
                        <ListView
                            android:id="@+id/right_container_listview"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent" >
                        </ListView>
                        
                    </LinearLayout>
                </com.thea.guo.leftrightscrool.view.SyncHorizontalScrollView>
            </LinearLayout>
        </ScrollView>
     
    </LinearLayout>

    2.其中SyncHorizontalScrollView 就是重写的那个实现联动的HorizontalScrollView

    [代码]xml代码:

    package com.thea.guo.leftrightscrool.view;
     
    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.View;
    import android.widget.HorizontalScrollView;
    /**
    * @Description:这个类也是从网上找的参考 
    */
    public class SyncHorizontalScrollView extends HorizontalScrollView {
        
        private View mView;
        
        public SyncHorizontalScrollView(Context context) {
            super(context);
            // TODO Auto-generated constructor stub
        }
        
        public SyncHorizontalScrollView(Context context, AttributeSet attrs) {
            super(context, attrs);
            // TODO Auto-generated constructor stub
        }
     
        protected void onScrollChanged(int l, int t, int oldl, int oldt) {
            super.onScrollChanged(l, t, oldl, oldt);
            //设置控件滚动监听,得到滚动的距离,然后让传进来的view也设置相同的滚动具体
            if(mView!=null) {
                mView.scrollTo(l, t);
            }
        }
        
        /**
        * 设置跟它联动的view
        * @param view
        */
        public void setScrollView(View view) {
            mView = view;
        }
    }
    3.最后就是Activity的逻辑处理

    package com.thea.guo.leftrightscrool;
     
    import android.app.Activity;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.widget.LinearLayout;
    import android.widget.ListView;
     
    import com.thea.guo.leftrightscrool.adapter.MyLeftAdapter;
    import com.thea.guo.leftrightscrool.adapter.MyRightAdapter;
    import com.thea.guo.leftrightscrool.model.RightModel;
    import com.thea.guo.leftrightscrool.tool.UtilTools;
    import com.thea.guo.leftrightscrool.view.SyncHorizontalScrollView;
     
    import java.util.ArrayList;
    import java.util.List;
     
    public class TableActivity extends Activity {
        private LinearLayout leftContainerView;
        private ListView leftListView;
        private List<String> leftlList;
        private LinearLayout rightContainerView;
        private ListView rightListView;
        private List<RightModel> models;
        private SyncHorizontalScrollView titleHorsv;
        private SyncHorizontalScrollView contentHorsv;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.layout_tab_view);
            leftContainerView = (LinearLayout) findViewById(R.id.left_container);
            leftListView = (ListView) findViewById(R.id.left_container_listview);
            rightContainerView = (LinearLayout) findViewById(R.id.right_container);
            rightListView = (ListView) findViewById(R.id.right_container_listview);
            titleHorsv = (SyncHorizontalScrollView) findViewById(R.id.title_horsv);
            contentHorsv = (SyncHorizontalScrollView) findViewById(R.id.content_horsv);
            // 设置两个水平控件的联动
            titleHorsv.setScrollView(contentHorsv);
            contentHorsv.setScrollView(titleHorsv);
     
            // 左
            leftContainerView.setBackgroundColor(Color.YELLOW);
            initLeftData();
            MyLeftAdapter adapter=new MyLeftAdapter(this, leftlList);
            leftListView.setAdapter(adapter);
            //控制高度
            UtilTools.setListViewHeightBasedOnChildren(leftListView);
            // 右
            rightContainerView.setBackgroundColor(Color.GRAY);
            initRightData();
            MyRightAdapter myRightAdapter=new MyRightAdapter(this, models);
            rightListView.setAdapter(myRightAdapter);
            //控制高度
            UtilTools.setListViewHeightBasedOnChildren(rightListView);
        }
     
        private void initRightData() {
            models=new ArrayList<RightModel>();
            for(int i=0;i<30;i++){
                models.add(new RightModel(i+"_0",i+"_1",i+"_2",i+"_3",i+"_4",i+"_5",i+"_6"));
            }
        }
     
        private void initLeftData() {
            leftlList=new ArrayList<String>();
            for(int i=0;i<30;i++){
                leftlList.add("Y_"+i);
            }
        }
    }

    Android实现一个类似股票列表联动的功能转载http://www.codesocang.com/anzhuoyuanma/boke/33928.html
    标签:网站源码