安卓ViewPager中嵌套ViewPager的滑动冲突解决,定时器实现ViewPager的无限左右滑动。
来源:互联网 发布:centos ssh key登录 编辑:程序博客网 时间:2024/05/16 07:15
整个项目的文件MainActivity中package com.example.tm.myapplication;import android.support.v4.app.Fragment;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity{ ViewPager parentViewpager; List<Fragment> fragments; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); } private static final String TAG = "MainActivity"; private void initData() { fragments=new ArrayList<>(); FirstFragment firstFragment=new FirstFragment(); SecondFragment secondFragment=new SecondFragment(); ThirdFragment thirdFragment=new ThirdFragment(); fragments.add(firstFragment); fragments.add(secondFragment); fragments.add(thirdFragment); ParentAdapter adapter=new ParentAdapter(getSupportFragmentManager(),fragments); parentViewpager.setAdapter(adapter); } private void initView() { parentViewpager= (ViewPager) findViewById(R.id.parent_viewPager); }}FirstFragment中package com.example.tm.myapplication;import android.os.Bundle;import android.os.Handler;import android.support.v4.app.Fragment;import android.support.v4.view.ViewPager;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class FirstFragment extends Fragment { private static final String TAG = "FirstFragment"; private View view; private ChildViewpager childViewpager; private List<ImageView> data; private int[] imageArray={R.mipmap.first,R.mipmap.second,R.mipmap.third,R.mipmap.forth,R.mipmap.fifth}; private int maxCount=5000; //启动一个定时器 private Handler handler=new Handler(); private Runnable runnable=new Runnable() { @Override public void run() { Log.i(TAG, "run: 进入了定时器"); childViewpager.setCurrentItem(maxCount++); handler.postDelayed(this,2000);//这一句是表示开启定时器的循环 } }; public FirstFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_first, container, false); childViewpager= (ChildViewpager) view.findViewById(R.id.child_viewPager); initData(); return view; } private void initData() { data=new ArrayList<>(); for(int i=0;i<5;i++){ ImageView imageView=new ImageView(getActivity()); imageView.setBackgroundResource(imageArray[i]); final int j=i; imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(getActivity(), "点击"+j, Toast.LENGTH_SHORT).show(); } }); data.add(imageView); } ChildAdapter adapter=new ChildAdapter(data,getActivity()); childViewpager.setAdapter(adapter); childViewpager.setCurrentItem(maxCount);//设置一个比较大的数用来为viewpager初始化第一个页面 childViewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { Log.i(TAG, "onPageScrolled: position"+position); handler.removeCallbacks(runnable); maxCount=position;//由于setCurrent()方法每次只能比原来的position多一个,所以将现在的position记录下来,为累加做初值 handler.postDelayed(runnable,2000); } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } }); handler.removeCallbacks(runnable); handler.postDelayed(runnable,2000); } @Override public void onPause() { super.onPause(); handler.removeCallbacks(runnable); } @Override public void onResume() { super.onResume(); handler.postDelayed(runnable,2000); }}SecondFragment中package com.example.tm.myapplication;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class SecondFragment extends Fragment { public SecondFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_second, container, false); }}ThirdFragment中package com.example.tm.myapplication;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class ThirdFragment extends Fragment { public ThirdFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_third, container, false); }}ChildAdapter中package com.example.tm.myapplication;import android.content.Context;import android.support.v4.view.PagerAdapter;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import java.util.List;public class ChildAdapter extends PagerAdapter { private List<ImageView> data; private Context context; private static final String TAG = "ChildAdapter"; public ChildAdapter(List<ImageView> data, Context context) { this.data = data; this.context = context; } @Override public int getCount() { //规定viewpager的最大页数 return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { Log.i(TAG, "destroyItem: 销毁了一个item"); container.removeView(data.get((position)%data.size())); } @Override public Object instantiateItem(ViewGroup container, int position) {//position是0-4 Log.i(TAG, "instantiateItem: 新建了一个item"); container.addView(data.get(position%data.size())); return data.get(position%data.size()); }}ParentAdapter中package com.example.tm.myapplication;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import java.util.List;public class ParentAdapter extends FragmentPagerAdapter { private List<Fragment> data; public ParentAdapter(FragmentManager fm,List<Fragment> data) { super(fm); this.data=data; } @Override public Fragment getItem(int position) { return data.get(position); } @Override public int getCount() { int ret=0; if(data!=null){ ret=data.size(); } return ret; }}ChildViewPager中(该文件是引用别人的地址是:http://blog.csdn.net/leewenjin/article/details/21011841)package com.example.tm.myapplication;import android.content.Context;import android.graphics.PointF;import android.support.v4.view.ViewPager;import android.text.style.ClickableSpan;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;public class ChildViewpager extends ViewPager { /** 触摸时按下的点 **/ PointF downP = new PointF(); /** 触摸时当前的点 **/ PointF curP = new PointF();// OnSingleTouchListener onSingleTouchListener; public ChildViewpager(Context context) { super(context); } public ChildViewpager(Context context, AttributeSet attrs) { super(context, attrs); } private static final String TAG = "ChildViewpager"; @Override public boolean onTouchEvent(MotionEvent arg0) { // TODO Auto-generated method stub //每次进行onTouch事件都记录当前的按下的坐标 if(getChildCount()<=1) { return super.onTouchEvent(arg0); } curP.x = arg0.getX(); curP.y = arg0.getY(); if(arg0.getAction() == MotionEvent.ACTION_DOWN) { //记录按下时候的坐标 //切记不可用 downP = curP ,这样在改变curP的时候,downP也会改变 downP.x = arg0.getX(); downP.y = arg0.getY(); //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰 getParent().requestDisallowInterceptTouchEvent(true); } if(arg0.getAction() == MotionEvent.ACTION_MOVE){ //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰 getParent().requestDisallowInterceptTouchEvent(true); } if(arg0.getAction() == MotionEvent.ACTION_UP || arg0.getAction() == MotionEvent.ACTION_CANCEL){ //在up时判断是否按下和松手的坐标为一个点 //如果是一个点,将执行点击事件,这是我自己写的点击事件,而不是onclick getParent().requestDisallowInterceptTouchEvent(false); if(downP.x==curP.x && downP.y==curP.y){ return true; } } super.onTouchEvent(arg0); //注意这句不能 return super.onTouchEvent(arg0); 否则触发parent滑动 return true; }}布局文件:
activity_main.xml中<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.tm.myapplication.MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/parent_viewPager" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager></RelativeLayout>fragment_first中<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#0f0" tools:context="com.example.tm.myapplication.FirstFragment"> <com.example.tm.myapplication.ChildViewpager android:id="@+id/child_viewPager" android:layout_width="match_parent" android:layout_height="200dp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/hello_blank_fragment" android:gravity="center" android:layout_marginTop="300dp"/></FrameLayout>fragment_second中<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.tm.myapplication.SecondFragment"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/hello_blank_fragment" android:gravity="center" android:background="#00f"/></FrameLayout>fragment_third中<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.tm.myapplication.ThirdFragment"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/hello_blank_fragment" android:gravity="center" android:background="#f00"/></FrameLayout>
1 0
- 安卓ViewPager中嵌套ViewPager的滑动冲突解决,定时器实现ViewPager的无限左右滑动。
- ScrollView嵌套ViewPager滑动冲突的解决
- Listview 嵌套 Viewpager 滑动冲突的解决
- 解决嵌套viewpager滑动冲突的解决方案
- Android viewpager嵌套viewpager滑动冲突的解决
- ScrollView中嵌入ViewPager,ViewPager的左右滑动冲突问题
- HorizontalScrollView 中嵌套 viewpager滑动冲突的解决
- PullToRefreshListView中嵌套ViewPager滑动冲突的解决
- 实现viewPager无限左右滑动
- ViewPager嵌套ViewPager滑动问题的解决
- 解决ViewPager嵌套ViewPager滑动冲突问题
- 解决ViewPager嵌套ViewPager滑动冲突问题
- ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
- ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
- ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
- ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
- ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
- ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
- ambari安装hdp2.4.0.0出现的编码问题(启动hive metastore时候失败)
- json编解码
- Python第一天
- Java利用json-lib操作json
- 网易2017笔试 编程题目
- 安卓ViewPager中嵌套ViewPager的滑动冲突解决,定时器实现ViewPager的无限左右滑动。
- Android之防火墙功能的实现
- hadoop完全分布式集群安装
- Lambda表达式详细总结
- 2-13 无名管道通信
- 地图相关
- c++四大类型转换函数
- 关于for-each与删除集合节点的思考
- [Leetcode] Linked List Cycle II