android中HorizontalScrollView实现viewpager的效果

原创 2015年07月07日 19:12:01

       因为工作上的需求,要实现一个翻页的页面,入下图:

      

     刚开始看到这种页面,想过viewpager,不过后来想换别的方式,所以想过gridview,但是gridview无法翻页,所以试了不行。后来想到了HorizontalScrollView这个控件。然后就试了一下,感觉还可以,基本上滑动的功能差不多了,就差翻页的功能,所以就上网查了很多资料。终于查到pageScroll这个方法,看看上面的介绍:


    简单来说,通过这个方法可以实现向左或者向右翻页,所以后来自己就有思路了,可以在onTouchListener中,监听x坐标来判断,用户是向左还是向右滑动,核心代码如下:

	/*int position=sections.size()%3==0?sections.size()/3:sections.size()/3+1;    //这里因为是刚好每一页三列,所以需要这么计算
	WindowManager wm=(WindowManager) getSystemService(Context.WINDOW_SERVICE);
	int width=wm.getDefaultDisplay().getWidth();
	int height=wm.getDefaultDisplay().getHeight();	
		for(int i=0;i<position;i++)
		{
			 View convertView=getLayoutInflater().inflate(R.layout.topicadd_item, null);
			 MarginLayoutParams mlp=new MarginLayoutParams(width/3, MarginLayoutParams.WRAP_CONTENT);
			 convertView.setLayoutParams(mlp);
			 	TextView tv1=(TextView) convertView.findViewById(R.id.topic_add_tv1);
				TextView tv2=(TextView) convertView.findViewById(R.id.topic_add_tv2);
				TextView tv3=(TextView) convertView.findViewById(R.id.topic_add_tv3);
				if(3*i<=sections.size()-1)
				{
					tv1.setText(sections.get(3*i));
					tv1.setTag(sections.get(3*i));
					tv1.setOnClickListener(this);
				}
			    if(3*i+1<=sections.size()-1)
			    {
					tv2.setText(sections.get(3*i+1));	
					tv2.setTag(sections.get(3*i+1));
					tv2.setOnClickListener(this);
			    }else
			    {
			    	tv2.setVisibility(View.INVISIBLE);
			    }
			    if((3*i+2)<=sections.size()-1)
			    {
			    	tv3.setText(sections.get(3*i+2));
			    	tv3.setTag(sections.get(3*i+2));
					tv3.setOnClickListener(this);
			    }else
			    {
			    	tv3.setVisibility(View.INVISIBLE);
			    }
			  lly.addView(convertView);  //把item布局添加到HorizontalScrollView的子布局中
		}*/    
onTouchListener的onTouch方法中,判断:

	public boolean onTouch(View v, MotionEvent event) {
				float xDown = 0;
				float xUp = 0;
				switch(event.getAction())
				{
				case MotionEvent.ACTION_DOWN:
					Log.e("TAG", "ACTION_DOWN");
					xDown=event.getX();
					break;
				case MotionEvent.ACTION_UP:
					Log.e("TAG", "ACTION_UP");
					xUp=event.getX();
					if(xUp-xDown>0)
					{
						hsv.pageScroll(View.FOCUS_RIGHT);//向左翻页
					}else
					{
						hsv.pageScroll(View.FOCUS_LEFT);
					}
					break;
				}
				return true;
			}
 核心代码基本是这样。不过因为在onTouch方法中ACTION_DOWN始终拦截不到,最终还是放弃了。采用viewpager轻松实现了。后面再补充吧。

     

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

相关文章推荐

Android 自定义 HorizontalScrollView 实现ViewPager效果,打造再多图片(控件)也不怕 OOM

1. 效果上次实现了这个IOS Reveal效果,能够确保中间部分是彩色其余部分是灰色,但是也遗留了两个问题:   (1)如果把它做成ViewPager效果的方式可能会更好;   (2)Horiz...

HorizontalScrollView+viewpager实现仿天天动听ios版和QQ侧边菜单效果

最近用HorizontalScrollView弄了个和slidingmenu差不多的效果的侧边菜单,顺便在里面嵌套viewpager,效果类似天天动听ios版和仿QQ侧边菜单栏

ViewPager和Fragment结合,利用(HorizontalScrollView)实现指示器与ViewPager同时滑动的动态效果

首先是布局文件,布局中需要一个HorizontalScrollView用来承载所有标题和指示器,注意HorizontalScrollView中只能有一个子布局,所以要添加一个Linearlayout(...

Android HorizontalScrollView结合GridView实现类似网易新闻那样的栏目滑动效果

今天无聊想实现一下网易新闻中栏目滑动的效果,想到了用HorizontalScrollView结合GridView来实现基础的功能: 最重要首先是的是布局: <RelativeLayout xmlns:...

Android开发——HorizontalScrollView实现侧滑效果

我们这个就不多说闲话了,贴完代码睡觉。 MyHoricontaiScrollView.java package com.example.horizontalscrollview; import a...

android HorizontalScrollView+ViewPager布局(viewpage不能滑动)

HorizontalScrollView+ViewPager
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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