[安卓]新闻客户端(七) 一些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
		
	}

java 上传文件到七牛云存储的demo

maven     引用 网上maven服务器 以及最新版的maven依赖 public http://192.168.2.115:8081/nexus/content/gro...
  • AlbertFly
  • AlbertFly
  • 2016年05月25日 17:45
  • 7644

Java 实现七牛云回调

有这样一个需求:android将文件上传到七牛云,并将文件在七牛云存储的信息返回业务服务器处理。七牛云的sdk上有一个模型解决这种需求,这是原理图:然而不幸的是,关于回调上传的demo一直找不到,经过...
  • change_on
  • change_on
  • 2017年04月26日 15:23
  • 921

七牛-怎样自定义上传文件的文件名字(key)

三种方式可以指定key 第一种方案: 客户需要在服务端生成token中,  tokenb中参数设置请参考文档:http://developer.qiniu.com/docs/v6/a...
  • github_37360787
  • github_37360787
  • 2017年02月20日 17:03
  • 2069

七牛---关于回调流程

很多用户不理解七牛的上传回调功能,这篇文章以一个具体的java实例讲解下七牛的回调功能。一般的上传流程是用户获得上传凭证之后直接将资源上传到七牛空间,然后七牛回返回一个上传成功或者失败的信息,用户业务...
  • netdxy
  • netdxy
  • 2015年10月19日 20:38
  • 5714

七牛云java基础版本

最近用到了七牛云,挺好用的,先来讲一下官方的demo,之后会上传一个自己封装的utils.java文件本文以 图片为例 更具体的请查看我的下一篇博客,关于七牛云的……. g Gradle :...
  • Xs15073722800
  • Xs15073722800
  • 2016年10月12日 12:32
  • 636

七牛上传文件(JS实现)

写前的迷茫:在七牛官网实例中可以很正常的使用上传功能,但是将文件以及资源下载到本地就不能上传了,报“格式错误”、“媒体类型错误”等,也不知道是什么原因导致的。后来看了uptoken比较重要,自认为是那...
  • musuny
  • musuny
  • 2014年12月01日 18:22
  • 15542

七牛---关于图片处理问题总结

很多用户遇到图片处理的一些问题,这里以一些实例总结下图片处理中的一些问题:1 图片多水印demo 关于水印接口使用说明可以参考: http://developer.qiniu.com/code/v...
  • netdxy
  • netdxy
  • 2016年05月27日 17:33
  • 4342

七牛图片上传的使用心得

如果你第一次用七牛管理图片,或者你对图片上传涉及的问题有质疑,或者你单纯的对标题感兴趣,可以进来看看,也可以跟我一起讨论...
  • shuzipai
  • shuzipai
  • 2016年10月20日 16:34
  • 14340

七牛---使用七牛给网站加速详解

很多用户在使用七牛的过程中都有需求对自己网站进行加速的功能,以下介绍一种常见的场景下对网站进行加速的情况:用户html里面引用的资源(比如图片音视频等静态资源)所在的域名假设为http://demod...
  • netdxy
  • netdxy
  • 2015年12月10日 23:47
  • 6065

七牛云存储之 Java SDK 简单上传

实现七牛的上传对多数开发者来说是很简单的,主要有一下几个步骤: 搭建开发环境; a.了解七牛的portal平台; b. 引入七牛的sdk,即jar包配置; Tips:不了解的可以先看一下我的博客...
  • PEACEFUL000
  • PEACEFUL000
  • 2016年07月22日 14:43
  • 3485
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[安卓]新闻客户端(七) 一些bug~
举报原因:
原因补充:

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