ScrollView水平滑动条选中条目的居中显示

创建选择器实现圆角矩形
    "http://schemas.android.com/apk/res/android"
        android:shape="rectangle" >

        "5dip"/>
        "#33ff0000"/>
    


创建选择器实现字体颜色改变
    "http://schemas.android.com/apk/res/android" >

        "true" android:color="@android:color/white">
        "true" android:color="@android:color/white">
        "@android:color/darker_gray">
    


创建选择器实现背景颜色改变
    "http://schemas.android.com/apk/res/android" >

        "true" android:drawable="@drawable/bgshape_shape">
        "true" android:drawable="@drawable/bgshape_shape">
    


布局文件引用
    "80dip"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="@drawable/textcolor_selector"
        android:background="@drawable/bgcolor_selector"
        android:padding="5dip"
        android:text="热门" />


MainActivity后台代码实现
    private int screenWitdth;
    private HorizontalScrollView hsv;
    private LinearLayout ll;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获得屏幕宽度
        screenWitdth = getResources().getDisplayMetrics().widthPixels;
        //初始化视图
        initView();
        //子控件点击事件
        initEvent();
    }

    //初始化视图
    private void initView(){
        hsv = (HorizontalScrollView) findViewById(R.id.hsv);
        ll = (LinearLayout) findViewById(R.id.ll);
        //默认选中第一个子控件
        hsv.getChildAt(0).setSelected(true);
    }

    //定义子控件点击事件
    private void initEvent(){
        //获得水平滑动控件中子控件——水平线性布局内共有多少子控件
        int childrenCount=hsv.getChildCount();

        //对子控件循环监听
        for(int i=0; iint currentIndex=i;
            //获得当前子控件
            View childView=hsv.getChildAt(i);

            //对当前子控件设置点击监听事件
            childView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //设置当前子控件诶选中
                    selectChildView(currentIndex);
                }
            });
        }
    }

    //对点击选中的子控件进行设置
    private void selectChildView(int position){
        int childrenCount=hsv.getChildCount();
        for(int i=0; i//获得当前子控件对象,并设置为选中状态
            View child=hsv.getChildAt(i);
            child.setSelected(true);
        }

        //设置选中条目居中
        View currentView=hsv.getChildAt(position);
        int left=currentView.getLeft();     //获取点击控件与父控件左侧的距离
        int width=currentView.getMeasuredWidth();   //获得控件本身宽度
        int toX=left+width/2-screenWitdth/2;
        //使条目移动到居中显示
        hsv.smoothScrollTo(toX, 0);
    }

你可能感兴趣的:(ScrollView水平滑动条选中条目的居中显示)