android HorizontalScrollView+ViewPager佈局(viewpage不能滑動)
阿新 • • 發佈:2019-02-15
關於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 rlDissertAssemTitleviewpage; @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(); } } }
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