【第22期】观点:IT 行业加班,到底有没有价值?

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效果

Android提供的ViewPager类太复杂,有时候没有必要使用,所以重写一个HorizontalScrollView来实现类似的效果,也可以当做Gallery来用 思路很简单,就是重写onT...

android Viewpager HorizontalScrollView 实现分页栏拖拽

首先我们先看一个效果: <img
  • mmdev
  • mmdev
  • 2012-07-26 09:51
  • 450

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

Android重写HorizontalScrollView模仿ViewPager效果

Android提供的ViewPager类太复杂,有时候没有必要使用,所以重写一个HorizontalScrollView来实现类似的效果,也可以当做Gallery来用 思路很简单,就是重写onT...

Android中如何使用ViewPager实现类似laucher左右拖动效果

现在很多Android应用在首次安装完都会有指引如何使用该应用的某些功能的指引界面,这样会获得很好的用户体验,能够帮助用户更好使用应用的某些功能。其实该功能和Android主界面的 luncher 的功能完全一样的效果,可以实现左右拖动。 下面结合 ViewPager 的实例来展示如何实现该功能,...

Android 实现横向标题栏滚动效果(HorizontalScrollView + GridView + Viewpager + 自定义适配器)

最近在完成一个新闻客户端项目时,需要做出一个横向标题栏的UI界面,在网上查阅多时,感觉不是很懂,最后自己摸索出来了一种更容易理解,且更加容易的实现方法,废话不多说上图:
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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