168.n1-事件处理
来源:互联网 发布:js 文本框数值相加 编辑:程序博客网 时间:2024/06/05 00:28
ViewPager和Indicator绑定的时候,滑动监听要设置给Indicator
详情页,tab下面的详情页和子页面banner是相互抵触的,banner需要处理滑动,父页面在位置0处需要拉出菜单栏,这样产生了矛盾,因此需要进行详细的处理,在banner和其父亲的非banner处分别处理
NewsMenuDetailPager.java详情页滑动的处理
package com.ldw.news.base.menudetails;import java.util.ArrayList;import android.app.Activity;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.View;import android.view.ViewGroup;import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;import com.ldw.news.MainActivity;import com.ldw.news.R;import com.ldw.news.base.BaseMenuDetailPager;import com.ldw.news.base.TabDetailPager;import com.ldw.news.domain.NewsData.NewsTabData;import com.lidroid.xutils.ViewUtils;import com.lidroid.xutils.view.annotation.event.OnClick;import com.viewpagerindicator.TabPageIndicator;/* * 菜单详情页-新闻*/ public class NewsMenuDetailPager extends BaseMenuDetailPager implements OnPageChangeListener{private ViewPager vp_menu_detail;private ArrayList<TabDetailPager> mPagerList;private ArrayList<NewsTabData> mNewsTabData;//页签的网络数据private TabPageIndicator mIndicator;public NewsMenuDetailPager(Activity activity, ArrayList<NewsTabData> children) {super(activity);//接受传过来的children数据,有11个mNewsTabData = children;}@Overridepublic View initView() {View view = View.inflate(mActivity, R.layout.news_menu_details, null);vp_menu_detail = (ViewPager) view.findViewById(R.id.vp_menu_detail);mIndicator = (TabPageIndicator) view.findViewById(R.id.indicator);//xUtils使用注解ViewUtils.inject(this, view);//不是对vp_menu_detail监听而是对mIndicator监听,viewPager。//vp_menu_detail.setOnPageChangeListener(this);//ViewPager和Indicator绑定的时候,滑动监听要设置给IndicatormIndicator.setOnPageChangeListener(this); return view;}@Overridepublic void initData(){//数据是通过从服务器中获取大数据来初始化mPagerList = new ArrayList<TabDetailPager>();for(int i = 0; i < mNewsTabData.size(); i++){TabDetailPager tabDetailPager = new TabDetailPager(mActivity, mNewsTabData.get(i));//添加到链表mPagerList.add(tabDetailPager);}vp_menu_detail.setAdapter(new MenuDetailAdapter());//在vp_menu_detail设置完成adapter以后才能调用,viewpager和indicator关联mIndicator.setViewPager(vp_menu_detail);}//监听右边的箭头,切换内容,内容+1@OnClick(R.id.btn_next)public void nextPage(View view){int currentItem = vp_menu_detail.getCurrentItem();vp_menu_detail.setCurrentItem(++ currentItem);}class MenuDetailAdapter extends PagerAdapter{//使用开源的框架PageIndicator初始化标题,重写这个方法设置tab@Override public CharSequence getPageTitle(int position) { return mNewsTabData.get(position).title; }@Overridepublic int getCount() {// TODO Auto-generated method stubreturn mPagerList.size();}@Overridepublic boolean isViewFromObject(View view, Object object) {// TODO Auto-generated method stubreturn view == object;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {//初始化页面TabDetailPager tabDetailPager = new TabDetailPager(mActivity, mNewsTabData.get(position));//添加viewcontainer.addView(tabDetailPager.mRebootView);//初始化数据tabDetailPager.initData();//显示界面return tabDetailPager.mRebootView;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView((View) object);}}@Overridepublic void onPageScrolled(int position, float positionOffset,int positionOffsetPixels) {// TODO Auto-generated method stub}//页面被选中,这个是对触摸事件的处理,监听触摸事件,只有在滑倒了最左边才会拉出菜单@Overridepublic void onPageSelected(int position) {//获取到左侧的菜单栏MainActivity mainUi = (MainActivity) mActivity;SlidingMenu slidingMenu = mainUi.getSlidingMenu();if(position == 0){//当前位置为0的时候可以全屏触摸,可以拉出来菜单栏slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);}else{//不为0的时候不让触摸slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);}}@Overridepublic void onPageScrollStateChanged(int state) {// TODO Auto-generated method stub}}TopNewsViewPager.java 详情页的banner的处理,需要出来几种情形的滑动
package com.ldw.news.view;import android.content.Context;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.view.MotionEvent;/* * banner图中不让父亲拦截ViewPager */public class TopNewsViewPager extends ViewPager {int startX;int startY;public TopNewsViewPager(Context context, AttributeSet attrs) {super(context, attrs);}public TopNewsViewPager(Context context) {super(context);}/** * 事件分发, 请求父控件及祖宗控件是否拦截事件 * 1. 右划, 而且是第一个页面, 需要父控件拦截 ,拉出菜单栏 * 2. 左划, 而且是最后一个页面, 需要父控件拦截,这样跳到父亲的下一页 * 3. 上下滑动, 需要父控件拦截,拉出listView,banner只需要处理左右滑动即可 */@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {//滑动事件的处理switch (ev.getAction()) {//按下case MotionEvent.ACTION_DOWN://按下的时候先让父亲控件不要拦截getParent().requestDisallowInterceptTouchEvent(true);// 不要拦截,// 这样是为了保证ACTION_MOVE调用startX = (int) ev.getRawX();startY = (int) ev.getRawY();break;//滑动case MotionEvent.ACTION_MOVE:int endX = (int) ev.getRawX();int endY = (int) ev.getRawY();//判断是上下滑动还是左右滑动if (Math.abs(endX - startX) > Math.abs(endY - startY)) {// 左右滑动if (endX > startX) {// 右划if (getCurrentItem() == 0) {// 第一个页面, 需要父控件拦截getParent().requestDisallowInterceptTouchEvent(false);}} else {// 左划if (getCurrentItem() == getAdapter().getCount() - 1) {// 最后一个页面,// 需要拦截getParent().requestDisallowInterceptTouchEvent(false);}}} else {// 上下滑动getParent().requestDisallowInterceptTouchEvent(false);}break;default:break;}return super.dispatchTouchEvent(ev);}}
阅读全文
0 0
- 168.n1-事件处理
- N1
- 166.n1-事件分发,让父类不要拦截
- N1 goi
- VOID N1
- 20150202 N1
- 20150203 N1
- 20150204 N1
- 20150212 N1
- 20150213 N1
- 20150226 N1
- 20150227 N1
- 20150228 N1
- 20150302 N1
- 20150303 N1
- 20150304 N1
- 20150305 N1
- 20150306 N1
- The Labyrinth 联通分量+搜索
- 路由器与交换机的区别
- 路由表生成算法
- AndroidStudio 导入com.android.support:recyclerview-v7xxxx 的问题
- 16 使用requestAnimationFrame()方法制作WebGL简单动画
- 168.n1-事件处理
- mybatis-generator使用
- Sass文件的导入import和Partials
- WEB应用发布管理平台的设计与实现
- mybatis-generator 去除注释
- sarama GoDoc 简译
- NYoj 121 另类乘法
- mybatis-generator 去除example
- 链表面试题(九)---判断一个链表是否带环