• android 禁止ViewPager滑动


    最近项目中,有个需求就是要禁止ViewPager滑动事件,我们看下360手机助手的界面,风格就类似这样的

    大家如果使用过360手机助手就会发现中间内容是不可以滑动的,现在写一个demo,讲下怎么禁止ViewPager事件的滑动

    布局文件

    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <com.example.viewpagears.ui.myviewpager
    android:id="@+id/viewpager"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />

    自定义ViewPager类

    public class MyViewPager extends ViewPager {
    private static final String TAG = "MyViewPager";
    private boolean result = false;
    public MyViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
    }
    public MyViewPager(Context context) {
    super(context);
    }
    @Override
    public boolean onInterceptTouchEvent(MotionEvent arg0) {
    if(result)
    return super.onInterceptTouchEvent(arg0);
    else
    return false;
    }
    @Override
    public boolean onTouchEvent(MotionEvent arg0) {
    if(result)
    return super.onTouchEvent(arg0);
    else
    return false;
    }
    }

    MainActivity.java

    package com.example.viewpagears;


    import java.util.ArrayList;
    import java.util.List;


    import android.app.Activity;
    import android.os.Bundle;
    import android.support.v4.view.PagerAdapter;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.Toast;


    import com.example.viewpagears.ui.MyViewPager;


    public class MainActivity extends Activity {
    private MyViewPager viewpager;
    private List views;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initData();
    viewpager = (MyViewPager) findViewById(R.id.viewpager);
    MyAdapter adapter = new MyAdapter();
    viewpager.setAdapter(adapter);
    }
    private void initData() {
    views = new ArrayList();
    for(int i=0;i<6;i++){
    ImageView iv = new ImageView(this);
    iv.setImageResource(R.drawable.ic_launcher);
    iv.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
    Toast.makeText(getApplicationContext(), "被点击了", 0).show();
    }
    });
    views.add(iv);
    }
    }
    class MyAdapter extends PagerAdapter{


    @Override
    public int getCount() {
    // TODO Auto-generated method stub
    return views.size();
    }


    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
    // TODO Auto-generated method stub
    return arg0==arg1;
    }


    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView(views.get(position));
    }


    @Override
    public Object instantiateItem(ViewGroup container, int position) {
    // TODO Auto-generated method stub
    container.addView(views.get(position));
    return views.get(position);
    }

    }
    }

    其实我们在自定义Viewpager其实很简单就是重写了2个方法:onInterceptTouchEvent(),onTouchEvent()

    onInterceptTouchEvent()表示拦截touch事件

    onTouchEvent()触摸事件

    在android中onTouchEvent默认是return true表示可以触摸,大家可以通过源码去看下,在这里就不讲了,onInterceptTouchEvent()不能返回true,如果return true子view什么事件都被拦截了,Viewpager对这个方法进行了一些重写,可以去看看他的源码,

  • 相关阅读:
    《Hadoop应用开发技术详解》
    c#中WMI 中的日期和时间转为本地时间
    c# 获取某个进程的CPU使用百分百(类似任务管理器中显示CPU)
    获得特定进程信息
    javascript利用jquery-1.7.1来判断是否是谷歌Chrome浏览器
    Oracle 用Drapper进行like模糊传参查询需要在参数值前后带%符合
    IIS7.0部署MVC/WebApi项目,报404.4错误
    MVC+EF6+Oracle,提示ORA-01918: user '***' does not exist
    MongoDB查询转对象是出错Element '_id' does not match any field or property of class
    MongoDB 导出、导入表
  • 原文地址:https://www.cnblogs.com/manmanlu/p/4323004.html
Copyright © 2020-2023  润新知