1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Android viewpager 嵌套 viewpager滑动 点击事件冲突解决方案

Android viewpager 嵌套 viewpager滑动 点击事件冲突解决方案

时间:2018-12-11 07:58:10

相关推荐

Android viewpager 嵌套 viewpager滑动 点击事件冲突解决方案

为了解决这个问题。可以自定义viewpager,然后在里面监听首饰,自定义点击事件

package com.hpuvoice.view;import android.content.Context;import android.graphics.PointF;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.view.GestureDetector;import android.view.GestureDetector.OnGestureListener;import android.view.MotionEvent;public class MyViewPager extends ViewPager implements OnGestureListener {/** 手势滑动处理类 **/private GestureDetector mDetector;/** 触摸时按下的点 **/PointF downP = new PointF();/** 触摸时当前的点 **/PointF curP = new PointF();OnSingleTouchListener onSingleTouchListener;public MyViewPager(Context context, AttributeSet attrs) {super(context, attrs);GestureDetector detector = new GestureDetector(context, this);mDetector = detector;}public GestureDetector getGestureDetector() {return mDetector;}@Overridepublic boolean onTouchEvent(MotionEvent arg0) {curP.x = arg0.getX();curP.y = arg0.getY();getParent().requestDisallowInterceptTouchEvent(true);if (arg0.getAction() == MotionEvent.ACTION_DOWN) {downP.x = arg0.getX();downP.y = arg0.getY();}if (arg0.getAction() == MotionEvent.ACTION_MOVE) {// 此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰getParent().requestDisallowInterceptTouchEvent(true);}if (arg0.getAction() == MotionEvent.ACTION_UP) {// 在up时判断是否按下和松手的坐标为一个点// 如果是一个点,将执行点击事件,这是我自己写的点击事件,而不是onclickif ((downP.x == curP.x) && (downP.y == curP.y)) {onSingleTouch();return true;}}return super.onTouchEvent(arg0);}@Overridepublic void setOnPageChangeListener(OnPageChangeListener listener) {super.setOnPageChangeListener(listener);}/*** 单击 */public void onSingleTouch() {if (onSingleTouchListener != null) {onSingleTouchListener.onSingleTouch();}}/*** * 创建点击事件接口 * */public interface OnSingleTouchListener {public void onSingleTouch();}public void setOnSingleTouchListener(OnSingleTouchListener onSingleTouchListener) {this.onSingleTouchListener = onSingleTouchListener;}@Overridepublic boolean onDown(MotionEvent e) {return false;}@Overridepublic void onShowPress(MotionEvent e) {}@Overridepublic boolean onSingleTapUp(MotionEvent e) {return false;}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,float distanceY) {return false;}@Overridepublic void onLongPress(MotionEvent e) {}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {return false;}}

然后在使用该viewpager的类中,进行一系列监听,使用,同事本案例是为了展示首页轮播图的效果,其中另外一个点就是首页轮播图动态添加小圆点。并且实现轮播效果。

package com.hpuvoice.fragment;import java.util.ArrayList;import java.util.HashMap;import java.util.Timer;import java.util.TimerTask;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import android.annotation.SuppressLint;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.util.TypedValue;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.view.animation.Animation;import android.view.animation.Animation.AnimationListener;import android.view.animation.AnimationUtils;import android.widget.Button;import android.widget.GridView;import android.widget.ImageView;import android.widget.ImageView.ScaleType;import android.widget.LinearLayout;import android.widget.TextView;import com.edaixi.activity.CityListActivity;import com.edaixi.activity.LoginActivity;import com.edaixi.activity.MainActivity;import com.edaixi.activity.PlaceorderActivity;import com.edaixi.activity.R;import com.edaixi.activity.WebActivity;import com.edaixi.appdata.Kclassdata;import com.edaixi.appdata.KeepingData;import com.edaixi.bean.Bannerlistbean;import com.edaixi.bean.InappUrlbean;import com.edaixi.bean.PostCommonBean;import com.edaixi.listadpter.Myfuncadpter;import com.mon;import com.edaixi.utils.DensityUtil;import com.Util;import com.edaixi.utils.SaveUtils;import com.edaixi.view.MySpringRing;import com.edaixi.view.MyViewPager.OnSingleTouchListener;import com.google.gson.Gson;import com.lidroid.xutils.BitmapUtils;public class HomeFragment extends BaseFragment implements OnClickListener {private static final int GETBANNERFAILD = 2;private static final int GETBANNERSUCCED = 3;private static final int GETFUNCTIONBTNSUCCED = 4;private static final int GETFUNCTIONBTNFAILD = 5;boolean RequstFlag = false;private View view;private Button main_order_btn;private HashMap<String, String> parms;private SaveUtils saveUtils;private String address = "";private GridView main_grid;private Myfuncadpter adapter;private com.edaixi.view.MyViewPager myview_pager;private ImageView anim_trousers;private ImageView anim_womencloth;private ImageView anim_clothsmall;private ImageView imageView_title;private ArrayList<Bannerlistbean> funditonlist;private JSONObject str;private TitleAdapter title;private Animation tosmallanimation;private ImageView anim_sleeveshort;private ArrayList<Bannerlistbean> banerlistbak;private LinearLayout pager_bottom;private int Animorder;private MySpringRing cricleView;private ImageView point;private static TextView loction_text;private int currentPosition = 0;private boolean is_Loop_Flag = true;;@SuppressLint("HandlerLeak")private Handler handler = new Handler() {private Gson gson = new Gson();@Overridepublic void handleMessage(Message msg) {myview_pager.setCurrentItem(currentPosition);currentPosition++;if ((banerlistbak.size() > 0)&& (currentPosition > banerlistbak.size() - 1)) {currentPosition = (currentPosition % banerlistbak.size());}if (is_Loop_Flag) {handler.sendEmptyMessageDelayed(0, 3000);}try {switch (msg.what) {case GETBANNERSUCCED:PostCommonBean jsonCommonBean = gson.fromJson((String) msg.obj, PostCommonBean.class);if (jsonCommonBean.isRet()) {String data = jsonCommonBean.getData();banerlistbak = null;banerlistbak = new ArrayList<Bannerlistbean>();paserbaner(data, banerlistbak);myview_pager.setCurrentItem(0);currentPosition = Integer.MAX_VALUE / 2- (Integer.MAX_VALUE / 2 % banerlistbak.size());addBannerPoint();TitleAdapter titlebak = new TitleAdapter(banerlistbak);myview_pager.setAdapter(titlebak);titlebak.notifyDataSetChanged();}break;case GETBANNERFAILD:break;case GETFUNCTIONBTNSUCCED:RequstFlag = true;PostCommonBean CommonBean = gson.fromJson((String) msg.obj,PostCommonBean.class);if (CommonBean.isRet()) {String data = CommonBean.getData();paserbaner(data, funditonlist);adapter.notifyDataSetChanged();}break;case GETFUNCTIONBTNFAILD:break;}super.handleMessage(msg);} catch (Exception e) {e.printStackTrace();}}};@SuppressLint("HandlerLeak")@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {view = (LinearLayout) inflater.inflate(R.layout.fragment_home,container, false);main_order_btn = (Button) view.findViewById(R.id.main_order_btn);main_grid = (GridView) view.findViewById(R.id.main_grid);myview_pager = (com.edaixi.view.MyViewPager) view.findViewById(R.id.myview_pager);cricleView = (MySpringRing) view.findViewById(R.id.myring_circle);cricleView.startAnim();pager_bottom = (LinearLayout) view.findViewById(R.id.pager_bottom);anim_trousers = (ImageView) view.findViewById(R.id.anim_trousers);anim_womencloth = (ImageView) view.findViewById(R.id.anim_womencloth);anim_clothsmall = (ImageView) view.findViewById(R.id.anim_clothsmall);anim_sleeveshort = (ImageView) view.findViewById(R.id.anim_sleeveshort);loction_text = (TextView) view.findViewById(R.id.loction_text);loction_text.setOnClickListener(this);myview_pager.setCurrentItem(currentPosition);myview_pager.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int position) {currentPosition = position;if (pager_bottom.getChildCount() > 0) {for (int i = 0; i < banerlistbak.size(); i++) {pager_bottom.getChildAt(i).setBackgroundResource(getImageResIDs()[0]);}pager_bottom.getChildAt(position).setBackgroundResource(getImageResIDs()[1]);}}@Overridepublic void onPageScrollStateChanged(int arg0) {}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}});myview_pager.setOnSingleTouchListener(new OnSingleTouchListener() {@Overridepublic void onSingleTouch() {Intent intent = new Intent();if (banerlistbak.get(myview_pager.getCurrentItem()).getUrl_type().equals("web")) {intent.putExtra("bannerlistbean",banerlistbak.get(myview_pager.getCurrentItem()));intent.setClass(getActivity(), WebActivity.class);startActivity(intent);} else if (banerlistbak.get(myview_pager.getCurrentItem()).getUrl_type().equals("in_app")) {if (!saveUtils.getBoolSP(KeepingData.LOGINED)) {intent.setClass(getActivity(), LoginActivity.class);} else {Gson gson = new Gson();InappUrlbean inappurlbean = gson.fromJson(banerlistbak.get(myview_pager.getCurrentItem()).getUrl(),InappUrlbean.class);intent.setClass(getActivity(), Kclassdata.getRechageclsss(inappurlbean.getKlass()));}startActivity(intent);}}});initView();handler.sendEmptyMessageDelayed(0, 3000);return view;}private void startanim() {tosmallanimation = (Animation) AnimationUtils.loadAnimation(getActivity(), R.anim.main_btn_scal_big);main_order_btn.startAnimation(tosmallanimation);}public static TextView getloctionview() {return loction_text;}private void get_func_button_list() {parms.clear();parms.put("width",String.valueOf(DensityUtil.getWidthInPx(getActivity())));parms.put("height",String.valueOf(DensityUtil.getHeightInPx(getActivity())));if (saveUtils.getStrSP(KeepingData.User_City_Id) != null) {parms.put("city_id", saveUtils.getStrSP(KeepingData.User_City_Id));} else {parms.put("city_id", "1");}((MainActivity) getActivity()).getdate(parms,Common.GET_FUNC_BUTTON_LIST, handler, GETFUNCTIONBTNSUCCED,GETFUNCTIONBTNFAILD, false, true, false);}private void get_banner_list() {parms.clear();parms.put("width",String.valueOf(DensityUtil.getWidthInPx(getActivity())));parms.put("height",String.valueOf(DensityUtil.getHeightInPx(getActivity())));if (saveUtils.getStrSP(KeepingData.User_City_Id) != null) {parms.put("city_id", saveUtils.getStrSP(KeepingData.User_City_Id));} else {parms.put("city_id", "1");}((MainActivity) getActivity()).getdate(parms, Common.GET_BANNER_LIST,handler, GETBANNERSUCCED, GETBANNERFAILD, true, true, false);}private void initView() {banerlistbak = new ArrayList<Bannerlistbean>();funditonlist = new ArrayList<Bannerlistbean>();saveUtils = new SaveUtils(this.getActivity());parms = new HashMap<String, String>();get_banner_list();title = new TitleAdapter(banerlistbak);myview_pager.setAdapter(title);adapter = new Myfuncadpter(getActivity(), funditonlist);main_grid.setAdapter(adapter);get_func_button_list();Animation toleftanim = (Animation) AnimationUtils.loadAnimation(getActivity(), R.anim.toleft_translaneannim);final Animation torightanim = (Animation) AnimationUtils.loadAnimation(getActivity(), R.anim.toright_translateanim);final Animation torightanim1 = (Animation) AnimationUtils.loadAnimation(getActivity(), R.anim.toleft_translation);final Animation toleftanim1 = (Animation) AnimationUtils.loadAnimation(getActivity(), R.anim.long_short_anim);AnimationListener animationListener = new AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationRepeat(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {Animorder++;switch (Animorder) {case 1:anim_womencloth.startAnimation(torightanim);break;case 2:anim_clothsmall.startAnimation(torightanim1);break;case 3:anim_sleeveshort.startAnimation(toleftanim1);break;default:break;}}};anim_trousers.setVisibility(View.VISIBLE);anim_womencloth.setVisibility(View.VISIBLE);anim_clothsmall.setVisibility(View.VISIBLE);anim_sleeveshort.setVisibility(View.VISIBLE);anim_trousers.startAnimation(toleftanim);toleftanim.setAnimationListener(animationListener);torightanim.setAnimationListener(animationListener);torightanim1.setAnimationListener(animationListener);toleftanim1.setAnimationListener(animationListener);main_order_btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {startanim();tosmallanimation.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationRepeat(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {if (!saveUtils.getBoolSP(KeepingData.LOGINED)) {startActivity(new Intent(getActivity(),LoginActivity.class));return;};Intent intent = new Intent(getActivity(),PlaceorderActivity.class);intent.putExtra("from", "fromMain");intent.putExtra(KeepingData.ADDRESS_DATA, address);startActivity(intent);}});}});loction_text.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(getActivity(),CityListActivity.class);startActivityForResult(intent, getActivity().RESULT_FIRST_USER);}});}@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) {super.setUserVisibleHint(isVisibleToUser);if (isVisibleToUser) {is_Loop_Flag = true;handler.sendEmptyMessageDelayed(0, 3000);if (NetUtil.getNetworkState(getActivity())) {if ((funditonlist != null) && !RequstFlag) {Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {getActivity().runOnUiThread(new Runnable() {@Overridepublic void run() {get_banner_list();get_func_button_list();}});}}, 500);}}} else {is_Loop_Flag = false;}}private int[] getImageResIDs() {return new int[] { R.drawable.splash_dot_default,R.drawable.splash_dot_current };}private class TitleAdapter extends PagerAdapter {private ArrayList<Bannerlistbean> mbannerlist;public TitleAdapter(ArrayList<Bannerlistbean> bannerlist) {super();mbannerlist = bannerlist;}@Overridepublic int getCount() {int size = mbannerlist.size() == 0 ? 2 : mbannerlist.size();// if (mbannerlist.size() > 0) {// return size;// } else {// return 2;// }return 3;}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == arg1;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {((ViewPager) container).removeView((View) object);}@Overridepublic Object instantiateItem(ViewGroup container, final int position) {View view = View.inflate(getActivity(), R.layout.bander_title, null);imageView_title = (ImageView) view.findViewById(R.id.iv_bander_title);imageView_title.setScaleType(ScaleType.CENTER_CROP);imageView_title.setImageResource(R.drawable.banner_default);if (mbannerlist.size() == 0) {container.addView(view, 0);return view;} else {BitmapUtils utils = new BitmapUtils(getActivity());utils.display(imageView_title, mbannerlist.get(position).getImage_url());container.addView(view, position);return view;}}}/** 动态添加轮播图小圆点 **/protected void addBannerPoint() {for (int i = 0; i < banerlistbak.size(); i++) {point = new ImageView(getActivity());point.setBackgroundResource(R.drawable.splash_dot_current);LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);params.gravity = Gravity.CENTER;point.setLayoutParams(params);point.setVisibility(View.VISIBLE);if (i == 0) {point.setEnabled(true);} else {point.setEnabled(false);}pager_bottom.addView(point);}}/** 解析banner结果方法 **/protected void paserbaner(String json, ArrayList<Bannerlistbean> bannerlist) {JSONArray jsonArray;bannerlist.clear();try {jsonArray = new JSONArray(json);for (int i = 0; i < jsonArray.length(); i++) {str = (JSONObject) jsonArray.opt(i);Bannerlistbean bannerlistbean = new Bannerlistbean();bannerlistbean.setImage_url(str.getString("image_url"));bannerlistbean.setUrl_type(str.getString("url_type"));bannerlistbean.setUrl(str.getString("url"));bannerlistbean.setTitle(str.getString("title"));if (str.getString("title").equals("按袋计费")) {saveUtils.saveStrSP(KeepingData.An_Dai_Ji_Fei_Url,str.getString("url"));} else if (str.getString("title").equals("按件计费")) {saveUtils.saveStrSP(KeepingData.An_Jian_Ji_Fei_Url,str.getString("url"));}bannerlist.add(bannerlistbean);}} catch (JSONException e) {e.printStackTrace();}}/** 回调用户选中城市结果方法 **/@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (saveUtils.getStrSP(KeepingData.User_City) != "") {loction_text.setText(saveUtils.getStrSP(KeepingData.User_City));get_banner_list();get_func_button_list();}}/** dp px 转换工具方法 **/private int dp2px(int dp) {return (int) TypedValue.applyDimension(PLEX_UNIT_DIP, dp,getResources().getDisplayMetrics());}}

布局就省略了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。