viewPager+Fragment实现左右划屏
来源:互联网 发布:算法导论第三版 15.4-4 编辑:程序博客网 时间:2024/04/30 04:57
最近接触左右划屏,从网上搜了一些资料,学习了一下,觉得不错,总结一下。
效果图如下,可以实现左右划屏
先说一下思路:
1.创建一个.java文件,继承Fragment
2.创建onCreateView()方法
3.将主页面的布局放在onCreateView中
View view = inflater.inflate(R.layout.fragment_userinfo, null);return view;4.初始化TextView,并且监听
textView1 = (TextView) view.findViewById(R.id.text1);textView2 = (TextView) view.findViewById(R.id.text2);textView3 = (TextView) view.findViewById(R.id.text3);textView1.setOnClickListener(new MyOnClickListener(0));textView2.setOnClickListener(new MyOnClickListener(1));textView3.setOnClickListener(new MyOnClickListener(2));
5.初始化ImageView,并计算滑动数据
private void InitImageView(LayoutInflater inflater,View view) {imageView = (ImageView) view.findViewById(R.id.cursor);bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.a).getWidth();// 获取图片宽度DisplayMetrics dm = new DisplayMetrics();getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);int screenW = dm.widthPixels;// 获取分辨率宽度offset = (screenW / 3 - bmpW) / 2;// 计算偏移量Matrix matrix = new Matrix();matrix.postTranslate(offset, 0);imageView.setImageMatrix(matrix);// 设置动画初始位置}
只贴一下主要的代码:
public class UserInfoFragment extends Fragment {private ViewPager viewPager;// 页卡内容private ImageView imageView;// 动画图片private TextView textView1, textView2, textView3;private List<View> views;// Tab页面列表private List<Fragment> fragments;// Tab页面列表private int offset = 0;// 动画图片偏移量private int currIndex = 0;// 当前页卡编号private int bmpW;// 动画图片宽度private View view1, view2, view3;// 各个页卡private Fragment fragment;private FragmentManager fragmentManager;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {if (Util.getAndroidSDKVersion() >= 4) {fragment = new UserInfoSettingFragment();fragmentManager = getChildFragmentManager();}View view = inflater.inflate(R.layout.fragment_userinfo, null);InitImageView(inflater,view);InitTextView(view);InitViewPager(inflater,view);return view;}private void InitViewPager(LayoutInflater inflater,View view) {viewPager = (ViewPager) view.findViewById(R.id.vPager);views = new ArrayList<View>();fragments=new ArrayList<Fragment>();fragments.add(new UserInfoSettingFragment());fragments.add(new UserInfoMesFragment());fragments.add(new NurseQuFragment());viewPager.setAdapter(new MyFragmentAdpter(fragments,fragmentManager)); viewPager.setCurrentItem(0);viewPager.setOnPageChangeListener(new MyOnPageChangeListener());}/** * 初始化头标 */private void InitTextView(View view) {textView1 = (TextView) view.findViewById(R.id.text1);textView2 = (TextView) view.findViewById(R.id.text2);textView3 = (TextView) view.findViewById(R.id.text3);textView1.setOnClickListener(new MyOnClickListener(0));textView2.setOnClickListener(new MyOnClickListener(1));textView3.setOnClickListener(new MyOnClickListener(2));}/** * 2 * 初始化动画,这个就是页卡滑动时,下面的横线也滑动的效果,在这里需要计算一些数据 3 */private void InitImageView(LayoutInflater inflater,View view) {imageView = (ImageView) view.findViewById(R.id.cursor);bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.a).getWidth();// 获取图片宽度DisplayMetrics dm = new DisplayMetrics();getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);int screenW = dm.widthPixels;// 获取分辨率宽度offset = (screenW / 3 - bmpW) / 2;// 计算偏移量Matrix matrix = new Matrix();matrix.postTranslate(offset, 0);imageView.setImageMatrix(matrix);// 设置动画初始位置}/** * * 头标点击监听 3 */private class MyOnClickListener implements OnClickListener {private int index = 0;public MyOnClickListener(int i) {index = i;}public void onClick(View v) {viewPager.setCurrentItem(index);}}public class MyOnPageChangeListener implements OnPageChangeListener {int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量int two = one * 2;// 页卡1 -> 页卡3 偏移量public void onPageScrollStateChanged(int arg0) {}public void onPageScrolled(int arg0, float arg1, int arg2) {}public void onPageSelected(int arg0) {Animation animation = new TranslateAnimation(one * currIndex, one* arg0, 0, 0);// 显然这个比较简洁,只有一行代码。currIndex = arg0;animation.setFillAfter(true);// True:图片停在动画结束位置animation.setDuration(300);imageView.startAnimation(animation);}}}
注:要利用这种方式的话,自动滑动的ImageView需要自己找一张图片,如果你想要只要标题汉字滑动,下面的线不滑动的话,可以直接用ViewPager自己的属性。
<android.support.v4.view.ViewPager android:id="@+id/viewPager_person_tab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left" > <android.support.v4.view.PagerTabStrip android:id="@+id/pagerTabStrip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top" android:background="@color/tabblack" android:scrollbars="@null" /> </android.support.v4.view.ViewPager>
0 0
- viewPager+Fragment实现左右划屏
- ViewPager+Fragment实现左右滑屏
- Fragment+ViewPager实现左右滑动
- ViewPager结合Fragment实现页面左右滑动
- ViewPager+Fragment实现左右滑动页
- AppBarLayout、ViewPager、Fragment实现页面左右滑动
- Android之实现ViewPager+Fragment左右滑动
- Viewpager+Fragment实现左右滑动切换页面
- ViewPager左右滑动Fragment
- 左右划屏
- 终结者:借助ViewPager实现Fragment左右滑动
- 在ViewPager中使用Fragment实现界面左右滑动
- BottomNavigationView + ViewPager + Fragment 实现左右滑动和下方导航栏
- Fragment+ViewPager 左右滑动 Demo
- 利用ViewPager实现Android页面划屏操作
- 使用ViewPager+ActivityGroup实现划屏,同时切换activity
- ViewPager+Fragment 的左右滑动,如何实现Fragment 的懒加载
- 利用ViewPager实现左右滑屏
- Eclipse背景颜色修改
- 将博客搬至CSDN
- 简单易学的机器学习算法——基于密度的聚类算法DBSCAN
- hdu4360 spfa+拆点
- Android——Mediaplay 框架调用
- viewPager+Fragment实现左右划屏
- 块状元素与内联元素的区别
- 第2部分:IoC容器
- Kinetic中文文档--Animation类
- Training--使用Fragment创建动态UI(2)--构建一个灵活的UI
- hdu 1195 Open the Lock 暴力穷举
- warning:performSelector may cause a leak because its selector is unknown
- java编码问题
- ecshop产品列表页按订单表销量排序