HorizontalScrollView 中巢狀 viewpager滑動衝突的解決
阿新 • • 發佈:2019-01-30
在 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是我借鑑了慕課網的視訊搞得,地址在這兒
裡邊有方法的詳細說法,我就不寫了。
資源地址