[安卓]新闻客户端(七) 一些bug~

原创 2015年07月10日 15:53:57

第一个,每次点击新闻中心,都自动弹出侧边栏,是因为上面有一个button,点击也能出侧边栏,之前测试的时候在新闻中心的代码里调用了他,故而每次进来都自动弹出

//响应侧边栏的点击事件,显示具体的内容
	public void setCurrentMenuDetailPager(int position) {
		//在这个pager里面的flcontent(帧布局)里面增加一个布局		
		 BaseMenuDetailPager baseMenuDetailPager = mPagers.get(position);
		 flContent.removeAllViews();// 清除之前的布局
		 flContent.addView( baseMenuDetailPager.mRootView);
		
		 baseMenuDetailPager.initData();// 初始化当前页面的数据
		 /*//点击button弹出侧边栏,在base里实现,都能用,测试用的,应该注释掉,否则点新闻中心自动弹出
		 toggleSlidingMenu();*/
	}

/*
	 * toggle函数,当前状态是显示,则调用后会不显示,当前不显示,则调用后会显示
	 * toggle无需参数
	 */
	protected void toggleSlidingMenu() {
		MainActivity mainUi = (MainActivity) mActivity;
		SlidingMenu slidingMenu = mainUi.getSlidingMenu();
		slidingMenu.toggle();
	}


第二个问题,scrollView的问题,对于小标题栏的新闻,里面有一个viewpager,每次划完topicnews,应该能滑到下一个栏目,比如从北京的最后一个滑到中国,或者从北京往右滑,能把侧边栏划出来。

这就要考虑onTouch事件

最里面的topicnews滑到头了,应该把touch事件交给上一层的viewpager来处理,他有12个子栏目



完善之前的TopNewsViewPager

重写dispatchTouchEvent

首选要判断左右移动(后面还有下拉刷新),需要坐标,左右坐标变动比上下变大动,其中的raw指的是绝对坐标,在整个屏幕来说的

public class TopNewsViewPager extends ViewPager{
	int startX;
	int startY;
	public TopNewsViewPager(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}

	public TopNewsViewPager(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}

	@Override
	public boolean dispatchTouchEvent(MotionEvent ev) {
		// TODO Auto-generated method stub
		switch (ev.getAction()) {
		case MotionEvent.ACTION_DOWN:// 不要拦截,这样是为了保证ACTION_MOVE调用
			getParent().requestDisallowInterceptTouchEvent(true);
			System.out.println("TopNewsViewPager.dispatchTouchEvent() ACTION_DOWN");
			startX = (int) ev.getRawX();
			startY = (int) ev.getRawY();
			break;
		case MotionEvent.ACTION_MOVE:
			System.out.println("TopNewsViewPager.dispatchTouchEvent() ACTION_MOVE");
			int endX = (int) ev.getRawX();
			int endY = (int) ev.getRawY();
			System.out.println("TopNewsViewPager.dispatchTouchEvent() + dx"+Math.abs(endX - startX)+"dy"+ Math.abs(endY - startY));		
			if (Math.abs(endX - startX) > Math.abs(endY - startY)) {// 左右滑动				
				System.out.println("TopNewsViewPager.dispatchTouchEvent() endx"+ endX + "startx"+startX +"cu:"+ getCurrentItem());
				if (endX > startX) {// 右划
					if (getCurrentItem() == 0) {// 第一个页面, 需要父控件拦截
						System.out
						.println("TopNewsViewPager.dispatchTouchEvent() 右滑 getCurrentItem() == 0"+ getChildCount());
						getParent().requestDisallowInterceptTouchEvent(false);
					}
				} else {// 左划
					if (getCurrentItem() == getAdapter().getCount() - 1) {// 最后一个页面,															
						getParent().requestDisallowInterceptTouchEvent(false);// 需要拦截
					}
				}
			} else {// 上下滑动
				getParent().requestDisallowInterceptTouchEvent(false);
			}
			break;
		default:
			break;
		}	
		return super.dispatchTouchEvent(ev);
	}
}

还是这里,另一个问题,从中国切回北京,在北京的topicnews里,往左滑能进中国了,但是往右滑却直接打开侧边栏了,按之前写的,只有第0个item时才给父控件,现在却没能屏蔽父控件,这里根据打的trace,这里确实屏蔽了,说明这个类里没问题,问题在别的地方,上一级,newsMenuDetail的viewPager,canscroll里面

@Override
	public boolean dispatchTouchEvent(MotionEvent ev) {		
		if (getCurrentItem() != 0) {
			getParent().requestDisallowInterceptTouchEvent(true);// 用getParent去请求,不拦截
		} else {// 如果是第一个页面,需要显示侧边栏, 请求父控件拦截
			getParent().requestDisallowInterceptTouchEvent(false);// 拦截
		}	
		return super.dispatchTouchEvent(ev);
	}

这里的意思是第一个栏目,北京的时候,交给父控件处理了,这样activity直接把侧边栏拉出来了,这样两者就冲突了,父盖了子~

这里有两个解法

首先是去掉else这一部分,如果设置false的话它会第一时间拦截,而如果不设的话它就会默认等ViewPager划到第一个页面才拦截

@Override
	public boolean dispatchTouchEvent(MotionEvent ev) {		
		if (getCurrentItem() != 0) {
			getParent().requestDisallowInterceptTouchEvent(true);// 用getParent去请求,不拦截
		} /*else {// 如果是第一个页面,需要显示侧边栏, 请求父控件拦截
			getParent().requestDisallowInterceptTouchEvent(false);// 拦截
		}	*/
		return super.dispatchTouchEvent(ev);
	}

另一个解法,这里整个都不要了,直接在布局里声明viewpager,不要继承

这样又回到之前要解决的问题,第一个子栏目能够把侧边栏拖出来

侧边栏的点击mode,响应区域,只有首个栏目才有,别的设为none,有同样的效果,需要listener,直接在类上面实现,下面重载方法



@Override
	public void onPageScrolled(int position, float positionOffset,
			int positionOffsetPixels) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void onPageSelected(int position) {
		// TODO Auto-generated method stub
		System.out.println("onPageSelected:" + position);
		MainActivity mainUi = (MainActivity) mActivity;
		SlidingMenu slidingMenu = mainUi.getSlidingMenu();
		if (position == 0) {//只有在第一个页面(北京), 侧边栏才允许出来
			slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
		} else {
			slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);
		}
	}
	@Override
	public void onPageScrollStateChanged(int state) {
		// TODO Auto-generated method stub
		
	}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

[安卓]新闻客户端(一)Splash

这里主要是一个图片实现的动画,并且需要有一个SharedPreferences,并抽成一个工具,来判断是否第一次进入,第一次进入先进入引导页再进入主页 布局 <RelativeLayout x...
  • rjlgo
  • rjlgo
  • 2015-07-05 16:01
  • 342

安卓新闻客户端编写(一) JSOUP抓取网页信息

学了安卓挺长时间了,但学的挺烂的,后来跟着做了点项目,发现还是做些东西会学的快些,最近想自己做一个新闻客户端,本人不比较喜欢玩LOL,所以就以根据LOL一个网站来做http://lol.tgbus.c...

[安卓]新闻客户端(二)引导页

引导页是第一次进APP才有的,他的效果是左右滑动几张图片,展现一些功能之类的,最后一张图片应该有个button,点击后计入主页面,同时在页面下部有红点 这要用到viewPager,安卓自己带有这个包,...
  • rjlgo
  • rjlgo
  • 2015-07-05 16:02
  • 507

安卓新闻客户端(五) ListView下拉刷新 XlistView解析

Xlistview包含三个部分 XlistView Header Footer 先来看Header根据这个Header 找了几个测试程序 首先是动画效果的

[安卓]新闻客户端(三) 主页面之slidingMenu & fragment(1)

这里的新闻客户端用到侧滑效果,slidingMenu,github上的开源项目 需要导入第三方库,具体过程不说了~ 这个侧滑工具的用法有好几种,但是较常见的还是结合fragment来使用,使用frag...
  • rjlgo
  • rjlgo
  • 2015-07-05 21:09
  • 912

[安卓]新闻客户端(五) 主页面之slidingMenu & fragment(3)

关于 listview上下拖动,这里需要带动上面的viewpager,本来可以放到scrollview里面,但是由于上面还有一个下拉菜单,所以需要把viewpager抽出来,当做listvie...
  • rjlgo
  • rjlgo
  • 2015-07-09 10:51
  • 317

[安卓]新闻客户端(六) 主页面之slidingMenu & fragment(4)

下拉菜单的实现:基本原理是把一些东西隐藏起来,下来时才显示,要设置一个padding属性,负值表示往里面收,也就是隐藏,然后在初始化数据时需要记录位置信息 只有dy小于0,并且listview显示的是...
  • rjlgo
  • rjlgo
  • 2015-07-10 15:38
  • 309

安卓新闻客户端(二) JSOUP解析HTML 抓取网页内容

最近在做一个安卓新闻客户端,新闻内容解析遇到了些麻烦,内容多样,文字视频图片都有,发现用Jsoup 不是那么好做,就上网查了查直接用用webview,可是用了之后发现显示空白,而且其实网页的大部分信息...

新闻客户端源码(安卓)

  • 2016-02-27 23:07
  • 9.85MB
  • 下载

安卓新闻客户端报告

  • 2015-12-28 15:26
  • 2.68MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)