android HorizontalScrollView+ViewPager布局(viewpage不能滑动)

来源:互联网 发布:下载excel2003软件步骤 编辑:程序博客网 时间:2024/05/18 22:43

关于HorizontalScrollView的各种用法,各种使用,参考官方API,里面很详细。这里是说一下我的解决方法

先把效果摆出来,在说话


首先在布局方面,上面是一个HorizontalScrollView,下面是一个viewpage

 <HorizontalScrollView        android:id="@+id/hsv_dissertaAssem_top"        android:layout_width="match_parent"        android:layout_height="?android:actionBarSize"        android:scrollbars="none"        android:layout_below="@+id/rl_dissert_assem_title">        <LinearLayout            android:id="@+id/ll_disserta_asserm_top"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:gravity="center_vertical"            android:orientation="horizontal"></LinearLayout>    </HorizontalScrollView>    <com.yibugou.ybg_app.util.CustomViewPager        android:id="@+id/container"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_below="@+id/hsv_dissertaAssem_top" />

逻辑代码

public class DissertationAssembleActivity extends BaseFragmentActivity {    private List<String> list = new ArrayList<>();    private TextView childTextView[];    @InjectView(R.id.iv_dissert_assem_back)    ImageView ivDissertAssemBack;    @InjectView(R.id.rl_dissert_assem_title)    RelativeLayout rlDissertAssemTitle;    @InjectView(R.id.container)    CustomViewPager viewPager;// 下部viewpage    @InjectView(R.id.ll_disserta_asserm_top)    LinearLayout llDissertaAssermTop;    @InjectView(R.id.hsv_dissertaAssem_top)    HorizontalScrollView hsvDissertaAssemTop;    private HashMap<String, String> param = new HashMap<>();// 参数    private LayoutInflater inflater;    private View views[];    private TextView textViews[];    private int clickIndex = 0;    private int textview_width;    private DissertationAssembleAdapter mAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_dissertation_assemble);        ButterKnife.inject(this);        inflater = LayoutInflater.from(this);        viewPager.setScanScroll(false);        initData();        addTextView();    }    private void initData() {        // 初始化数据        param.put("v", YbgUtils.getVersionName(this));        // 测试填充数据        for (int i = 0; i < 10; i++) {            String str = "" + i + "";            list.add(str);        }//        viewPager.setOffscreenPageLimit(1);//一次只加载一个        mAdapter = new DissertationAssembleAdapter(getSupportFragmentManager());        viewPager.setOnPageChangeListener(dissertAssemOnpageChangeListener);    }    private ViewPager.OnPageChangeListener dissertAssemOnpageChangeListener = new ViewPager.OnPageChangeListener() {        @Override        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            changeTextColor(position);        }        @Override        public void onPageSelected(int position) {        }        @Override        public void onPageScrollStateChanged(int state) {        }    };    private void addTextView() {        int count = list.size();        int childIndex = 0;        views = new View[count];        textViews = new TextView[count];        textview_width =  getWindowManager().getDefaultDisplay().getWidth() / 5;        for (int i = 0; i < count; i++) {            View view = inflater.inflate(R.layout.fabric_select_itop_choose, null);            view.setTag(childIndex);            view.setOnClickListener(dissertAssemtopOnclick);            TextView textView = (TextView) view.findViewById(R.id.tv_fabric_select_top);            textView.setText(list.get(i));// 填充数据            LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(textview_width,                    ViewPager.LayoutParams.MATCH_PARENT);            view.setLayoutParams(param);            llDissertaAssermTop.addView(view);//            hsvDissertaAssemTop.addView(view,i);            textViews[childIndex] = textView;            childIndex++;        }        changeTextColor(0);        initAdapter();    }    private void initAdapter(){        viewPager.setAdapter(mAdapter);    }    /**     * 设置字体颜色     *      * @param id     */    private void changeTextColor(int id) {        for (int i = 0; i < textViews.length; i++) {            if (i != id) {                textViews[i].setTextColor(0xff000000);            } else {                textViews[id].setTextColor(getResources().getColor(R.color.top_index_bg));            }        }    }    private View.OnClickListener dissertAssemtopOnclick = new View.OnClickListener() {        @Override        public void onClick(View view) {            clickIndex = (int) view.getTag();            changeTextColor(clickIndex);            // 在改变下面的fragment            viewPager.setCurrentItem(clickIndex);        }    };    @OnClick(R.id.iv_dissert_assem_back)    public void dissertAssemBackOnclick(View view) {        finish();    }    class DissertationAssembleAdapter extends FragmentPagerAdapter{        public DissertationAssembleAdapter(FragmentManager fm) {            super(fm);        }        @Override        public Fragment getItem(int position) {            return DissertAssemFragment.newInstance(position + 1,null);        }        @Override        public int getCount() {            return list.size();        }    }}
viewpage

public class DissertAssemFragment extends BaseFragment implements AdapterView.OnItemClickListener {    public static final String ARG_SECTION_NUMBER = "section_number";    public static final String DISSERTATION_ASSEMBLE_ITEM_LIST = "dissertation_assemble_item_list";    private ArrayList<String> list = new ArrayList<>();    private ListView mListView;    private DissertationAssembleItemAdapter mAdapter;    public DissertAssemFragment() {    }    public static DissertAssemFragment newInstance(int sectionNumber, ArrayList<Object> lists) {        DissertAssemFragment fragment = new DissertAssemFragment();        Bundle args = new Bundle();        args.putInt(ARG_SECTION_NUMBER, sectionNumber);        args.putSerializable(DISSERTATION_ASSEMBLE_ITEM_LIST, lists);        fragment.setArguments(args);        return fragment;    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View rootView = inflater.inflate(R.layout.fragment_disserta_assem, container, false);        mListView = (ListView) rootView.findViewById(R.id.lv_dissert_assem);        TextView textView = (TextView) rootView.findViewById(R.id.section_label);        textView.setText(getString(R.string.search_hint, getArguments().getInt(ARG_SECTION_NUMBER))+getArguments().getInt(ARG_SECTION_NUMBER));        list = (ArrayList<String>) getArguments().getSerializable(DISSERTATION_ASSEMBLE_ITEM_LIST);        initData(rootView);        return rootView;    }    private void initData(View view) {        mAdapter = new DissertationAssembleItemAdapter();        mListView.setAdapter(mAdapter);        mListView.setOnItemClickListener(this);    }    @Override    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {        //点击之后跳转到相应的页面    }    class DissertationAssembleItemAdapter extends BaseAdapter {        LayoutInflater myInflate = LayoutInflater.from(mContext);        @Override        public int getCount() {            if (list != null && list.size() > 0)                return list.size();            else                return 0;        }        @Override        public Object getItem(int i) {            if(list.size() > 0 && list != null){                return list.get(i);            }            return null;        }        @Override        public long getItemId(int i) {            return i;        }        @Override        public View getView(int i, View view, ViewGroup viewGroup) {            ImageView imageView ;            if(view == null){                view =  myInflate.inflate(R.layout.dissert_assermble_item,null);                imageView = (ImageView) view.findViewById(R.id.iv_dissert_assem);                view.setTag(imageView);            }else {                imageView = (ImageView) view.getTag();            }            //设置图片            Animation animation = AnimationUtils.loadAnimation(mContext,R.anim.anim_scale);            view.setAnimation(animation);            return view;        }    }}
CustomViewPager自定义的实现
public class CustomViewPager extends ViewPager {    private boolean isCanScroll = false;    public CustomViewPager(Context context) {        super(context);    }    public CustomViewPager(Context context, AttributeSet attrs) {        super(context, attrs);    }    public void setScanScroll(boolean isCanScroll) {        this.isCanScroll = isCanScroll;    }    @Override    public void scrollTo(int x, int y) {        super.scrollTo(x, y);    }    @Override    public boolean onTouchEvent(MotionEvent arg0) {        if (isCanScroll)            return super.onTouchEvent(arg0);        else            return false;    }    @Override    public boolean onInterceptTouchEvent(MotionEvent arg0) {        if (isCanScroll)            return super.onInterceptTouchEvent(arg0);        else            return false;    }    @Override    public void setCurrentItem(int item, boolean smoothScroll) {        super.setCurrentItem(item, smoothScroll);    }    @Override    public void setCurrentItem(int item) {        super.setCurrentItem(item);    }}

参考API

0 0