Android-viewpager滑动监听
2017-04-06 17:24
323 查看
http://blog.csdn.net/lvyoujt/article/details/51138744
http://blog.csdn.net/lvyoujt/article/details/51147669
package com.cctvjiatao.viewpagedemo;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
/**
* @作者: jiatao
* @修改时间:2016-4-12 上午7:53:22
* @包名:com.cctvjiatao.viewpagedemo
* @文件名:FragAdapter.java
* @版权声明:www.cctvjiatao.com
* @功能: 通过输出日志认识 ViewPager的滑动监听器 OnPageChangeListener
*/
public class MainActivity extends FragmentActivity {
private final String TAG = getClass().getSimpleName();
private ViewPager viewpager;
private FragAdapter adapter;
private List<Fragment> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewpager = (ViewPager) findViewById(R.id.viewpager);
list = new ArrayList<Fragment>();
list.add(new Frag1());
list.add(new Frag2());
adapter = new FragAdapter(getSupportFragmentManager(), list);
viewpager.setAdapter(adapter);
viewpager.setCurrentItem(0);
/**
* 滑动监听器OnPageChangeListener
* OnPageChangeListener这个接口需要实现三个方法:onPageScrollStateChanged,onPageScrolled ,onPageSelected
* 1、onPageScrollStateChanged(int arg0) 此方法是在状态改变的时候调用。
* 其中arg0这个参数有三种状态(0,1,2)
* arg0 ==1的时表示正在滑动,arg0==2的时表示滑动完毕了,arg0==0的时表示什么都没做
* 当页面开始滑动的时候,三种状态的变化顺序为1-->2-->0
* 2、onPageScrolled(int arg0,float arg1,int arg2) 当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直被调用。
* 其中三个参数的含义分别为:
* arg0 :当前页面,及你点击滑动的页面
* arg1:当前页面偏移的百分比
* arg2:当前页面偏移的像素位置
* 3、onPageSelected(int arg0) 此方法是页面跳转完后被调用,arg0是你当前选中的页面的Position(位置编号)
*/
viewpager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// arg0是当前选中的页面的Position
Log.e(TAG, "onPageSelected------>"+arg0);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// arg0 :当前页面,及你点击滑动的页面;arg1:当前页面偏移的百分比;arg2:当前页面偏移的像素位置
Log.e(TAG, "onPageScrolled------>arg0:"+arg0+"\nonPageScrolled------>arg1:"+arg1+"\nonPageScrolled------>arg2:"+arg2);
}
@Override
public void onPageScrollStateChanged(int arg0) {
//arg0 ==1的时表示正在滑动,arg0==2的时表示滑动完毕了,arg0==0的时表示什么都没做。
if(arg0 == 0){
Log.e(TAG, "onPageScrollStateChanged------>0");
}else if(arg0 == 1){
Log.e(TAG, "onPageScrollStateChanged------>1");
}else if(arg0 == 2){
Log.e(TAG, "onPageScrollStateChanged------>2");
}
}
});
}
}
http://blog.csdn.net/lvyoujt/article/details/51147669
package com.cctvjiatao.viewpagedemo;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
/**
* @作者: jiatao
* @修改时间:2016-4-12 上午7:53:22
* @包名:com.cctvjiatao.viewpagedemo
* @文件名:FragAdapter.java
* @版权声明:www.cctvjiatao.com
* @功能: 通过输出日志认识 ViewPager的滑动监听器 OnPageChangeListener
*/
public class MainActivity extends FragmentActivity {
private final String TAG = getClass().getSimpleName();
private ViewPager viewpager;
private FragAdapter adapter;
private List<Fragment> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewpager = (ViewPager) findViewById(R.id.viewpager);
list = new ArrayList<Fragment>();
list.add(new Frag1());
list.add(new Frag2());
adapter = new FragAdapter(getSupportFragmentManager(), list);
viewpager.setAdapter(adapter);
viewpager.setCurrentItem(0);
/**
* 滑动监听器OnPageChangeListener
* OnPageChangeListener这个接口需要实现三个方法:onPageScrollStateChanged,onPageScrolled ,onPageSelected
* 1、onPageScrollStateChanged(int arg0) 此方法是在状态改变的时候调用。
* 其中arg0这个参数有三种状态(0,1,2)
* arg0 ==1的时表示正在滑动,arg0==2的时表示滑动完毕了,arg0==0的时表示什么都没做
* 当页面开始滑动的时候,三种状态的变化顺序为1-->2-->0
* 2、onPageScrolled(int arg0,float arg1,int arg2) 当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直被调用。
* 其中三个参数的含义分别为:
* arg0 :当前页面,及你点击滑动的页面
* arg1:当前页面偏移的百分比
* arg2:当前页面偏移的像素位置
* 3、onPageSelected(int arg0) 此方法是页面跳转完后被调用,arg0是你当前选中的页面的Position(位置编号)
*/
viewpager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// arg0是当前选中的页面的Position
Log.e(TAG, "onPageSelected------>"+arg0);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// arg0 :当前页面,及你点击滑动的页面;arg1:当前页面偏移的百分比;arg2:当前页面偏移的像素位置
Log.e(TAG, "onPageScrolled------>arg0:"+arg0+"\nonPageScrolled------>arg1:"+arg1+"\nonPageScrolled------>arg2:"+arg2);
}
@Override
public void onPageScrollStateChanged(int arg0) {
//arg0 ==1的时表示正在滑动,arg0==2的时表示滑动完毕了,arg0==0的时表示什么都没做。
if(arg0 == 0){
Log.e(TAG, "onPageScrollStateChanged------>0");
}else if(arg0 == 1){
Log.e(TAG, "onPageScrollStateChanged------>1");
}else if(arg0 == 2){
Log.e(TAG, "onPageScrollStateChanged------>2");
}
}
});
}
}
package com.cctvjiatao.viewpagerdemo; import java.lang.reflect.Field; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v4.widget.EdgeEffectCompat; import android.util.Log; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.Toast; /** * @作者: jiatao * @修改时间:2016-4-13 下午6:18:27 * @文件名:MainActivity.java * @版权声明:www.cctvjiatao.com * @功能: 1、理解运用 PagerAdapter * 2、深入理解 OnPageChangeListener中的onPageScrollStateChanged(int state) * 3、ViewPager在拖拽到左边和右边的时候,禁止显示黄色或者蓝色的渐变图片的解决方法 */ /* * ViewPager在拖拽到左边和右边的时候,禁止显示黄色或者蓝色的渐变图片的解决方法:打开用“//”注释掉的代码即可 */ public class MainActivity extends Activity { private Context mContext; private ViewPager mViewPager; private StartPagerAdapter mStartPagerAdapter; private ImageView[] dotImageViews; private PageChangeListenerImpl mPageChangeListenerImpl; private LinearLayout mDotsLinearLayout; private boolean misScrolled = false; //ViewPager在拖拽到最左边或最右边的时候,会显示黄色或蓝色的渐变图片,如果要禁止显示这些渐变,需要用到下面这两个属性 // private EdgeEffectCompat leftEdge; // private EdgeEffectCompat rightEdge; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = this; requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); initView(); } private void initView() { mViewPager = (ViewPager) findViewById(R.id.guide_viewpager); mDotsLinearLayout = (LinearLayout) findViewById(R.id.dotsLinearLayout); mStartPagerAdapter = new StartPagerAdapter(mContext); mPageChangeListenerImpl = new PageChangeListenerImpl(); mViewPager.setAdapter(mStartPagerAdapter); mViewPager.setOnPageChangeListener(mPageChangeListenerImpl); // try {//通过反射得到对象 // Field leftEdgeField = mViewPager.getClass().getDeclaredField("mLeftEdge"); // Field rightEdgeField = mViewPager.getClass().getDeclaredField("mRightEdge"); // Log.e(TAG, "=======leftEdgeField:" + leftEdgeField + ",rightEdgeField:" + rightEdgeField);// if (leftEdgeField != null && rightEdgeField != null) { // leftEdgeField.setAccessible(true); // rightEdgeField.setAccessible(true); // leftEdge = (EdgeEffectCompat) leftEdgeField.get(mViewPager); // rightEdge = (EdgeEffectCompat) rightEdgeField.get(mViewPager); // Log.e(TAG, "=======OK啦,leftEdge:" + leftEdge + ",rightEdge:" + rightEdge); // } // } catch (Exception e) { // e.printStackTrace(); // } initDots(); } // 初始化小圆点 private void initDots() { dotImageViews = new ImageView[mStartPagerAdapter.getCount()]; for (int i = 0; i < dotImageViews.length; i++) { LinearLayout layout = new LinearLayout(mContext); ImageView imageView = new ImageView(mContext); imageView.setLayoutParams(new ViewGroup.LayoutParams(20, 20)); if (i == 0) { imageView.setBackgroundResource(R.drawable.guide_dot_white); } else { layout.setPadding(20, 0, 0, 0); imageView.setBackgroundResource(R.drawable.guide_dot_black); } dotImageViews[i] = imageView; layout.addView(imageView); mDotsLinearLayout.addView(layout); } } private class PageChangeListenerImpl implements ViewPager.OnPageChangeListener { @Override public void onPageSelected(int selected) { for (int i = 0; i < dotImageViews.length; i++) { dotImageViews[selected].setBackgroundResource(R.drawable.guide_dot_white); if (selected != i) { dotImageViews[i].setBackgroundResource(R.drawable.guide_dot_black); } } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // if (leftEdge != null && rightEdge != null) { // leftEdge.finish(); // rightEdge.finish(); // leftEdge.setSize(0, 0); // rightEdge.setSize(0, 0); // } } /** * 重点!通过输出日志认真理解 onPageScrollStateChanged(int state) 的运用,主要是对state参数的认识 */ @Override public void onPageScrollStateChanged(int state) { switch (state) { case ViewPager.SCROLL_STATE_DRAGGING://1 dragging(拖动),理解为:只要触发拖动/滑动事件时,则 state = ViewPager.SCROLL_STATE_DRAGGING misScrolled = false; Log.e("onPageScrollStateChanged", "state:"+state+"---------->misScrolled:"+misScrolled+"---------->现在的页码索引:"+mViewPager.getCurrentItem()); break; case ViewPager.SCROLL_STATE_SETTLING://2 settling(安放、定居、解决),理解为:通过拖动/滑动,安放到了目标页,则 state = ViewPager.SCROLL_STATE_SETTLING misScrolled = true; Log.e("onPageScrollStateChanged", "state:"+state+"---------->misScrolled:"+misScrolled+"---------->现在的页码索引:"+mViewPager.getCurrentItem()); break; case ViewPager.SCROLL_STATE_IDLE://0 idle(空闲,挂空挡), 理解为:只要拖动/滑动结束,无论是否安放到了目标页,则 state = ViewPager.SCROLL_STATE_IDLE if (mViewPager.getCurrentItem() == mViewPager.getAdapter().getCount() - 1 && !misScrolled) {//如果当前页是最后一页,并且滑动,则触发finish() /*此处可写一些逻辑,如finish() 或 startActivity() finish();*/ Log.e("在末页向左滑", "state:"+state+"---------->misScrolled:"+misScrolled+"---------->现在的页码索引:"+mViewPager.getCurrentItem()); Toast.makeText(mContext, "已经是最后一页", 2).show(); } if (mViewPager.getCurrentItem() == 0 && !misScrolled) {//如果当前页是第一页,并且滑动,则触发finish() /*此处可写一些逻辑,如finish() 或 startActivity() finish();*/ Log.e("在首页向右滑", "state:"+state+"---------->misScrolled:"+misScrolled+"---------->现在的页码索引:"+mViewPager.getCurrentItem()); Toast.makeText(mContext, "已经是第一页", 2).show(); } misScrolled = true; Log.e("onPageScrollStateChanged", "state:"+state+"---------->misScrolled:"+misScrolled+"---------->现在的页码索引:"+mViewPager.getCurrentItem()); break; } } } @Override protected void onDestroy() { super.onDestroy(); if (null != mViewPager) { mViewPager.removeAllViews(); mViewPager = null; } } }
相关文章推荐
- Android ViewPager事件滑动监听修改
- Android 如何去除ViewPager的左右滑动监听
- Android ViewPager 监听滑动
- android viewpager 滑动监听
- android(仿QQ向右滑动退出)在viewpager中onTouchEvent无法监听到ACTION_DOWN的getX的值
- android - ViewPager 监听左右滑动
- Android ViewPager与仿Gallery的HorizontalScrollView互相滑动监听
- android ScrollView嵌套ListView自动滑动到底部,嵌套ViewPager出现的滑动冲突以及监听滑动停止
- Android ViewPager多页面滑动切换以及动画效果
- android 界面开发: 图片、界面滑动翻页效果(ViewPager)
- Android ViewPager多页面滑动切换以及动画效果
- android 使用ViewPager实现左右滑动
- Android使用ViewPager实现左右滑动效果
- Android ViewPager 实现多个页面切换滑动
- android:ViewPager实现Tabs滑动切换效果
- Android ViewPager多页面滑动切换以及动画效果!!!
- Android中用ViewPager实现多页面滑动切换及动画效果的实例
- Android: 扩展WebView 和ViewPager实现viewpager中的水平滑动,类似Gmail的效果
- android - 滑动效果之ViewFlipper与ViewPager与Gallery
- Android ViewPager 实现多个页面切换滑动