1. 需求:
一个ViewPager,正常情况下能滑动,但在某些情况下禁止滑动
2. 分析:
有时候能滑动有时候不能滑动,那最好就是给这个ViewPager做个开关
3. 实现依据:
滑动事件监听函数onTouchEvent,禁止ViewPager滑动,可以在这个方法里不去调用ViewPager实现的滑动。
src/com/yeezone/viewpage/HelloViewPageActivity.java
res/layout/view1.xml
res/layout/view4.xml
src/com/yeezone/viewpage/MyViewPager.java
src/com/yeezone/viewpage/MyPagerAdapter.java
一个ViewPager,正常情况下能滑动,但在某些情况下禁止滑动
2. 分析:
有时候能滑动有时候不能滑动,那最好就是给这个ViewPager做个开关
3. 实现依据:
滑动事件监听函数onTouchEvent,禁止ViewPager滑动,可以在这个方法里不去调用ViewPager实现的滑动。
@Override
public boolean onTouchEvent(MotionEvent arg0) {
super.onTouchEvent(arg0);
}
4. 实现方法:1. 继承ViewPager,增加一个设置开关的方法来控制MyViewPager里的全局变量
private boolean mEnable = true;
@Override
public boolean onTouchEvent(MotionEvent arg0) {
Log.v(TAG, "onTouchEvent");
if(!mEnable){
return true;
}
return super.onTouchEvent(arg0);
}
public void setViewPageEnable(boolean enable){
Log.v(TAG, "setViewPageEnable " + enable);
mEnable = enable;
}
2. 在适当的时候去关闭/打开这个开关mPageSwtich.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mPagerEnabled = !mPagerEnabled;
mPager.setViewPageEnable(mPagerEnabled);
}
});
5. 示例:src/com/yeezone/viewpage/HelloViewPageActivity.java
package com.yeezone.viewpage;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
public class HelloViewPageActivity extends Activity {
/** Called when the activity is first created. */
private Button mPageSwtich;
private boolean mPagerEnabled = true;
MyViewPager mPager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mPageSwtich = (Button) findViewById(R.id.viewpage_swtich);
List<View> views = new ArrayList<View>();
LayoutInflater mLi = LayoutInflater.from(this);
View view1 = mLi.inflate(R.layout.view1, null);
ImageView pic = new ImageView(this);
pic.setImageResource(R.drawable.ic_launcher);
TextView page3 = new TextView(this);
page3.setText("Page3");
View view4 = mLi.inflate(R.layout.view4, null);
views.add(view1);
views.add(pic);
views.add(page3);
views.add(view4);
mPager = (MyViewPager)findViewById(R.id.viewpager);
mPager.setAdapter(new MyPagerAdapter(views));
mPageSwtich.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mPagerEnabled = !mPagerEnabled;
mPager.setViewPageEnable(mPagerEnabled);
}
});
}
}
res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/viewpage_swtich"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="PageSwtich" />
<com.yeezone.viewpage.MyViewPager
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:id="@+id/viewpager"/>
</LinearLayout>
res/layout/view1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="aaa" />
</LinearLayout>
res/layout/view4.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="ddd" />
</LinearLayout>
src/com/yeezone/viewpage/MyViewPager.java
package com.yeezone.viewpage;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
public class MyViewPager extends ViewPager{
private static final String TAG = "MyViewPager";
private boolean mEnable = true;
public MyViewPager(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
public boolean onTouchEvent(MotionEvent arg0) {
Log.v(TAG, "onTouchEvent");
if(!mEnable){
return true;
}
return super.onTouchEvent(arg0);
}
public void setViewPageEnable(boolean enable){
Log.v(TAG, "setViewPageEnable " + enable);
mEnable = enable;
}
}
src/com/yeezone/viewpage/MyPagerAdapter.java
package com.yeezone.viewpage;
import java.util.List;
import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
public class MyPagerAdapter extends PagerAdapter{
private static final String TAG = "MyPagerAdapter";
private List<View> views;
public MyPagerAdapter(List<View> views) {
super();
this.views = views;
}
@Override
public int getCount() {
Log.v(TAG, "getCount");
return views.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
Log.v(TAG, "isViewFromObject");
return arg0==arg1;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Log.v(TAG, "instantiateItem position = " + position);
container.addView(views.get(position));
return views.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
Log.v(TAG, "destroyItem position = " + position);
container.removeView(views.get(position));
}
}