HorizontalScrollView和ViewPager联动效果

69 阅读2分钟
        mViewPager.setCurrentItem(2);

    } else if (checkedId == R.id.btn3) {

        _TranslateAnimation = new TranslateAnimation(

                mCurrentCheckedRadioLeft, getResources().getDimension(

                        R.dimen.rdo3), 0f, 0f);



        _AnimationSet.addAnimation(_TranslateAnimation);

        _AnimationSet.setFillBefore(false);

        _AnimationSet.setFillAfter(true);

        _AnimationSet.setDuration(100);



        // mImageView.bringToFront();

        mImageView.startAnimation(_AnimationSet);



        mViewPager.setCurrentItem(3);

    } else if (checkedId == R.id.btn4) {

        _TranslateAnimation = new TranslateAnimation(

                mCurrentCheckedRadioLeft, getResources().getDimension(

                        R.dimen.rdo4), 0f, 0f);



        _AnimationSet.addAnimation(_TranslateAnimation);

        _AnimationSet.setFillBefore(false);

        _AnimationSet.setFillAfter(true);

        _AnimationSet.setDuration(100);



        // mImageView.bringToFront();

        mImageView.startAnimation(_AnimationSet);

        mViewPager.setCurrentItem(4);

    } else if (checkedId == R.id.btn5) {

        _TranslateAnimation = new TranslateAnimation(

                mCurrentCheckedRadioLeft, getResources().getDimension(

                        R.dimen.rdo5), 0f, 0f);



        _AnimationSet.addAnimation(_TranslateAnimation);

        _AnimationSet.setFillBefore(false);

        _AnimationSet.setFillAfter(true);

        _AnimationSet.setDuration(100);



        // mImageView.bringToFront();

        mImageView.startAnimation(_AnimationSet);



        mViewPager.setCurrentItem(5);

    }



    mCurrentCheckedRadioLeft = getCurrentCheckedRadioLeft();// 更新当前蓝色横条距离左边的距离



    Log.i("zj", "getCurrentCheckedRadioLeft="

            + getCurrentCheckedRadioLeft());

    Log.i("zj", "getDimension=" + getResources().getDimension(R.dimen.rdo2));



    // 让ScrollBar自动跟随点击的button位置而变动,否则你点击到最右侧了,右侧的条目不会自动显示出来,还要手动滑动ScrollBar

    // 后面跟的x,y坐标,可以自己测试来给出,比如这里当你点击第1、2个按钮时x=-1、0,这里不可能存在负数,-1按0计,ScrollBar在最左侧即可,当你点击第3/4/5按钮时,ScrollBar适当右移100/200/300

    mHorizontalScrollView.smoothScrollTo((int) mCurrentCheckedRadioLeft

            - (int) getResources().getDimension(R.dimen.rdo2), 0);

}



/**

 * 获得当前被选中的RadioButton距离左侧的距离

 */

private float getCurrentCheckedRadioLeft() {

    // TODO Auto-generated method stub

    if (mRadioButton1.isChecked()) {

        // Log.i("zj",

        // "currentCheckedRadioLeft="+getResources().getDimension(R.dimen.rdo1));

        return getResources().getDimension(R.dimen.rdo1);

    } else if (mRadioButton2.isChecked()) {

        // Log.i("zj",

        // "currentCheckedRadioLeft="+getResources().getDimension(R.dimen.rdo2));

        return getResources().getDimension(R.dimen.rdo2);

    } else if (mRadioButton3.isChecked()) {

        // Log.i("zj",

        // "currentCheckedRadioLeft="+getResources().getDimension(R.dimen.rdo3));

        return getResources().getDimension(R.dimen.rdo3);

    } else if (mRadioButton4.isChecked()) {

        // Log.i("zj",

        // "currentCheckedRadioLeft="+getResources().getDimension(R.dimen.rdo4));

        return getResources().getDimension(R.dimen.rdo4);

    } else if (mRadioButton5.isChecked()) {

        // Log.i("zj",

        // "currentCheckedRadioLeft="+getResources().getDimension(R.dimen.rdo5));

        return getResources().getDimension(R.dimen.rdo5);

    }

    return 0f;

}



private void iniListener() {

    // TODO Auto-generated method stub



    mRadioGroup.setOnCheckedChangeListener(this);



    mViewPager.setOnPageChangeListener(new MyPagerOnPageChangeListener());

}



private void iniController() {

    // TODO Auto-generated method stub

    mRadioGroup = (RadioGroup) findViewById(R.id.radioGroup);

    mRadioButton1 = (RadioButton) findViewById(R.id.btn1);

    mRadioButton2 = (RadioButton) findViewById(R.id.btn2);

    mRadioButton3 = (RadioButton) findViewById(R.id.btn3);

    mRadioButton4 = (RadioButton) findViewById(R.id.btn4);

    mRadioButton5 = (RadioButton) findViewById(R.id.btn5);



    mImageView = (ImageView) findViewById(R.id.img1);



    mHorizontalScrollView = (HorizontalScrollView) findViewById(R.id.horizontalScrollView);



    mViewPager = (ViewPager) findViewById(R.id.pager);

}



/**

 * ViewPager的适配器

 * 

 * @author zj 2012-5-24 下午2:26:57

 */

private class MyPagerAdapter extends PagerAdapter {



    @Override

    public void destroyItem(View v, int position, Object obj) {

        // TODO Auto-generated method stub

        ((ViewPager) v).removeView(mViews.get(position));

    }



    @Override

    public void finishUpdate(View arg0) {

        // TODO Auto-generated method stub



    }



    @Override

    public int getCount() {

        // TODO Auto-generated method stub

        return mViews.size();

    }



    @Override

    public Object instantiateItem(View v, int position) {

        ((ViewPager) v).addView(mViews.get(position));

        return mViews.get(position);

    }



    @Override

    public boolean isViewFromObject(View arg0, Object arg1) {

        // TODO Auto-generated method stub

        return arg0 == arg1;

    }



    @Override

    public void restoreState(Parcelable arg0, ClassLoader arg1) {

        // TODO Auto-generated method stub



    }



    @Override

    public Parcelable saveState() {

        // TODO Auto-generated method stub

        return null;

    }



    @Override

    public void startUpdate(View arg0) {

        // TODO Auto-generated method stub



    }



}



/**

 * ViewPager的PageChangeListener(页面改变的监听器)

 * 

 * @author zj 2012-5-24 下午3:14:27

 */

private class MyPagerOnPageChangeListener implements OnPageChangeListener {



    @Override

    public void onPageScrollStateChanged(int arg0) {

        // TODO Auto-generated method stub



    }



    @Override

    public void onPageScrolled(int arg0, float arg1, int arg2) {

        // TODO Auto-generated method stub



    }



    /**

     * ★别忘了!!!滑动ViewPager的时候,让上方的HorizontalScrollView自动切换

     */

    @Override

    public void onPageSelected(int position) {

        // TODO Auto-generated method stub

        // Log.i("zj", "position="+position);



        if (position == 0) {

            // 必须是写setCurrentItem(1),上边设置的是radiogroup的选择改变监听事件,而不是点击事件

            // 你预先点击performClick,并不会实现把页面切回到A页面的操作

            mViewPager.setCurrentItem(1);

            // mRadioButton1.performClick();

        } else if (position == 1) {

            mRadioButton1.performClick();

        } else if (position == 2) {

            mRadioButton2.performClick();

        } else if (position == 3) {

            mRadioButton3.performClick();

        } else if (position == 4) {

            mRadioButton4.performClick();

        } else if (position == 5) {

            mRadioButton5.performClick();

        } else if (position == 6) {

            mViewPager.setCurrentItem(5);

            // mRadioButton5.performClick();

        }

    }



}

}




* * *



**_布局_**



<LinearLayout xmlns:android="schemas.android.com/apk/res/and…"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<HorizontalScrollView 

    android:layout_width="match_parent"

    android:layout_height="50dp"

    android:fadingEdge="@null"

    android:scrollbars="none"

    android:background="#555555"

    android:id="@+id/horizontalScrollView"

>

    <RelativeLayout 

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:background="#33b5e5"

    >

        <RadioGroup

            android:id="@+id/radioGroup"

            android:layout_width="fill_parent"

            android:layout_height="49dp"

            android:orientation="horizontal"

            android:layout_alignParentTop="true"

        >

            <RadioButton

                style="@style/radioButton"

                android:text="one"

                android:id="@+id/btn1"

            />

            <RadioButton 

                style="@style/radioButton"

                android:text="two"

                android:id="@+id/btn2"

            />

            <RadioButton 

                style="@style/radioButton"

                android:text="three"

                android:id="@+id/btn3"

            />

            <RadioButton

                style="@style/radioButton"

                android:text="four"

                android:id="@+id/btn4"

            />

            <RadioButton 

                style="@style/radioButton"

                android:text="five"

                android:id="@+id/btn5"

            />

        </RadioGroup>

        <ImageView

            android:id="@+id/img1"

            android:layout_width="100dp"

            android:layout_height="4dp"

            android:background="#33b5e5"

            android:layout_alignParentBottom="true"

        />

    </RelativeLayout>

</HorizontalScrollView>

<android.support.v4.view.ViewPager

    android:id="@+id/pager"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

/>



* * *



**_item_**  

_layout\_0_



<LinearLayout

xmlns:android="schemas.android.com/apk/res/and…"

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@android:color/darker_gray">




_layout\_1_



<LinearLayout

xmlns:android="schemas.android.com/apk/res/and…"

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@android:color/darker_gray">

<TextView 

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:text="A"

    android:gravity="center"

    android:textSize="240sp"

    android:textColor="#33b5e5"

/>