在 HorizontalScrollView 中嵌套 viewpager,viewpager不会随手势滑动,所以要复写viewpager
public class MyViewpager extends ViewPager {
MyViewpager viewpager;
private int size = -1;
public MyViewpager(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
public boolean onInterceptTouchEvent(MotionEvent p_event)
{
return true;
}
private PointF sp = new PointF();
@Override
public boolean onTouchEvent(MotionEvent arg0) {
// TODO Auto-generated method stub
int action = arg0.getAction();
switch (action){
case MotionEvent.ACTION_DOWN:
sp = new PointF(arg0.getX(), arg0.getY());
break;
case MotionEvent.ACTION_MOVE:
PointF ep = new PointF(arg0.getX(), arg0.getY());
float move_x = sp.x - ep.x;
if(!(move_x < 0 && getCurrentItem() == 0) && getParent() != null
&& !(move_x > 0 && getCurrentItem() == getAdapter().getCount() - 1)
&& sp.x > 50){
Log.i("DEBUG", "intercept move event");
getParent().requestDisallowInterceptTouchEvent(true);
}
}
return super.onTouchEvent(arg0);
}
}
在手指滑动时进行判断,当不是第一页且向右滑动,也不是最后一页且向左滑动,并且ACTION_DOWN在x轴为50以上的viewpager可自行滑动
package com.example.viewhortest;
import java.util.ArrayList;
import android.app.Activity;
import android.graphics.PointF;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import com.mylogin.update.view.MyViewpager;
import com.mylogin.update.view.SlidingMenu;
public class MainActivity extends Activity {
private MyViewpager vp_start;
private ArrayList<View> views;
private SlidingMenu mLeftMenu ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViewPager();
}
private void initViewPager() {
mLeftMenu = (SlidingMenu) findViewById(R.id.id_menu);
vp_start = (MyViewpager)findViewById(R.id.vp_start);
views = new ArrayList<View>();
LayoutInflater inflater = getLayoutInflater();
views.add(inflater.inflate(R.layout.ss1, null));
views.add(inflater.inflate(R.layout.ss2, null));
views.add(inflater.inflate(R.layout.ss3, null));
views.add(inflater.inflate(R.layout.ss4, null));
vp_start.setAdapter(new MyViewPager(views));
// vp_start.requestDisallowInterceptTouchEvent(true);
// vp_start.setOnTouchListener(new MyOntouch());
}
class MyViewPager extends PagerAdapter {
public ArrayList<View> list;
public MyViewPager(ArrayList<View> list) {
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(list.get(position), 0);
return list.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(list.get(position));
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
}
}
这里是main方法。
解压压缩包以后,右键TEST,Properties-->Android,,将Is Library勾上,
然后将右键ViewHorTest,Properties-->Android-->ADD,将Test勾上就行了。
SlidingMenu是我借鉴了慕课网的视频搞得,地址在这儿
http://www.imooc.com/learn/211
里边有方法的详细说法,我就不写了。
资源地址
http://download.csdn.net/detail/u013898922/8195065