ScrollView切换

原创 2016年06月01日 09:51:23

这个是MainActivity的代码

package com.example.asd;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.LinearInterpolator;
import android.view.animation.TranslateAnimation;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.RelativeLayout;

public class MainActivity extends FragmentActivity {
    public static String[] tabTitle = { "选项1", "选项2", "选项3", "选项4", "选项5" }; // 标题
    public static final String ARGUMENTS_NAME = "arg";
    private RelativeLayout rl_nav;
    private HorizontalScrollView mHsv;
    private RadioGroup rg_nav_content;
    private ImageView iv_nav_indicator;
    private ViewPager mViewPager;
    private int indicatorWidth;
    private LayoutInflater mInflater;
    private TabFragmentPagerAdapter mAdapter;
    private int currentIndicatorLeft = 0;

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

    private void setListener() {
        mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                if (rg_nav_content != null
                        && rg_nav_content.getChildCount() > position) {
                    ((RadioButton) rg_nav_content.getChildAt(position))
                            .performClick();
                }
            }

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

            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
        });

        rg_nav_content.setOnCheckedChangeListener(new OnCheckedChangeListener() {

                    @Override
                    public void onCheckedChanged(RadioGroup group, int checkedId) {

                        if (rg_nav_content.getChildAt(checkedId) != null) {

                            TranslateAnimation animation = new TranslateAnimation(
                                    currentIndicatorLeft,
                                    ((RadioButton) rg_nav_content
                                            .getChildAt(checkedId)).getLeft(),
                                    0f, 0f);
                            animation.setInterpolator(new LinearInterpolator());
                            animation.setDuration(100);
                            animation.setFillAfter(true);

                            // 执行位移动画
                            iv_nav_indicator.startAnimation(animation);

                            mViewPager.setCurrentItem(checkedId); // ViewPager
                                                                    // 跟随一起 切换

                            // 记录当前 下标的距最左侧的 距离
                            currentIndicatorLeft = ((RadioButton) rg_nav_content
                                    .getChildAt(checkedId)).getLeft();

                            mHsv.smoothScrollTo(
                                    (checkedId > 1 ? ((RadioButton) rg_nav_content
                                            .getChildAt(checkedId)).getLeft()
                                            : 0)
                                            - ((RadioButton) rg_nav_content
                                                    .getChildAt(2)).getLeft(),
                                    0);
                        }
                    }
                });
    }

    private void initView() {
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        indicatorWidth = dm.widthPixels / 4;
        LayoutParams cursor_Params = iv_nav_indicator.getLayoutParams();
        cursor_Params.width = indicatorWidth;// 初始化滑动下标的宽
        iv_nav_indicator.setLayoutParams(cursor_Params);
        // mHsv.setSomeParam(rl_nav, iv_nav_left, iv_nav_right, this);
        // 获取布局填充器
        mInflater = (LayoutInflater) this
                .getSystemService(LAYOUT_INFLATER_SERVICE);
        // 另一种方式获取
        // LayoutInflater mInflater = LayoutInflater.from(this);
        initNavigationHSV();
        mAdapter = new TabFragmentPagerAdapter(getSupportFragmentManager());
        mViewPager.setAdapter(mAdapter);
    }

    private void initNavigationHSV() {
        rg_nav_content.removeAllViews();
        for (int i = 0; i < tabTitle.length; i++) {
            RadioButton rb = (RadioButton) mInflater.inflate(
                    R.layout.nav_radiogroup_item, null);
            rb.setId(i);
            rb.setText(tabTitle[i]);
            rb.setLayoutParams(new LayoutParams(indicatorWidth,
                    LayoutParams.MATCH_PARENT));

            rg_nav_content.addView(rb);
        }
    }

    private void findViewById() {
        rl_nav = (RelativeLayout) findViewById(R.id.rl_nav);
        mHsv = (HorizontalScrollView) findViewById(R.id.mHsv);
        rg_nav_content = (RadioGroup) findViewById(R.id.rg_nav_content);
        iv_nav_indicator = (ImageView) findViewById(R.id.iv_nav_indicator);
        mViewPager = (ViewPager) findViewById(R.id.mViewPager);
    }

    public static class TabFragmentPagerAdapter extends FragmentPagerAdapter {

        public TabFragmentPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int arg0) {
            Fragment ft = null;
            switch (arg0) {
            case 0:
                ft = new LaunchUIFragment();
                break;

            default:
                ft = new CommonUIFragment();

                Bundle args = new Bundle();
                args.putString(ARGUMENTS_NAME, tabTitle[arg0]);
                ft.setArguments(args);

                break;
            }
            return ft;
        }

        @Override
        public int getCount() {

            return tabTitle.length;
        }

    }
}



这个是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" >
    
    <TextView
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:text="@string/common_intro"
        />
    
    <TextView
        android:id="@+id/tv_tabName"
        android:layout_marginTop="30dp"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_gravity="center"
        android:textSize="20sp"
        />

</LinearLayout>

android fragment中 ScrollView嵌套ListView以及切换时scrollView显示底部的解决

fragment中,布局使用了scrollView嵌套ListView,listView会只显示一项,解决的办法是手动计算高度 //解决ScrollView嵌套ListView只显示一行 pu...
  • jifashihan
  • jifashihan
  • 2016年12月08日 16:28
  • 1554

Unity3d之ScrollView实现图片浏览切换功能----折磨的学习

由于项目需要,需要用NGUi实现一个图片浏览切换的功能,于是参考官方NGUI例子的ScrollView做了一个例子,初始看上去基本实现了自己想要的功能。 但是测试后发现当隐藏其中一张图片后,后面图片不...
  • wyz365889
  • wyz365889
  • 2013年08月06日 11:55
  • 3557

ScrollView+ViewPager(上下滚动+自动切换图片)

ScrollView+ViewPager(上下滚动+自动切换图片),ViewPager自动滚动
  • s611533106
  • s611533106
  • 2014年11月27日 18:16
  • 1686

解决在scrollview上下滑动嵌套scrollview,viewpager水平滑动时的抖动问题

下面是自定义的scrollview,能解决在scrollview上下滑动嵌套scrollview,viewpager水平滑动时的抖动问题!可以直接在xml文件中引用下面的组件! http://bbs....
  • longtian635241
  • longtian635241
  • 2014年03月11日 21:39
  • 1922

Android ScrollView监听滑动到顶部和底部的两种方式

转自http://www.cnblogs.com/popfisher/p/5709202.html 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚...
  • suashui09
  • suashui09
  • 2017年01月06日 17:28
  • 1874

ScrollView和Fragment中的ListView、WebView滑动冲突问题的解决

日常开发中很少会碰到ScrollView中嵌套listview或webview的情况,而且谷歌官方也不推荐这么做,但是也不是一定不会有这样的需求,毕竟定需求的不是我们程序员,而是产品经理。比如像下面这...
  • woshiwangbiao
  • woshiwangbiao
  • 2017年06月02日 10:54
  • 794

iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍)

本来只是打算介绍一下addChildViewController这个方法的,正好今天朋友去换工作面试问到网易新闻标签栏效果的实现,就结合它,用个小Demo实例介绍一下:(具体解释都写在了Demo里面的...
  • humingtao2013
  • humingtao2013
  • 2014年06月25日 21:51
  • 21090

Unity ScrollView图片滑动翻页效果

这个效果就类似安卓手机翻相册里面图片时左右翻的效果,做出这个效果有很多种方式,比如移动端的话你可以直接判断手势,然后去让图片往相应方向滑动,我这里的方法是直接根据ScrollBar(用的NGUI)的值...
  • Dennis_DWP
  • Dennis_DWP
  • 2017年11月04日 09:44
  • 238

【疑难杂症】webview与scrollview嵌套碰到的难题!webview高度在横屏后更改!

这次碰到一个问题是,activity内有个webview,这个activity叫做a1,然后webview刚开始是个列表页,我这里叫url1,高度是500px...
  • u011704305
  • u011704305
  • 2016年08月15日 09:56
  • 1333

Android-使用ScrollView设置滚动界面

Android-使用ScrollView设置滚动界面在安卓App里面有一些内容需要我们手指进行下拉滚动才可见,因为手机的屏幕只有那么大, 不可能全部显示,所以ScrollView可解决这个问题。还是...
  • ACM_TH
  • ACM_TH
  • 2016年04月09日 11:43
  • 4216
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ScrollView切换
举报原因:
原因补充:

(最多只允许输入30个字)