当前位置:操作系统 > 安卓/Android >>

在android画面切换时设置跟随变动的小圆圈

前言:我们经常在使用各类安卓APP的时候发现会有如图所示的小圆圈显示当前页所在的,甚至一般来说我们的android桌面上也应该有类似的提示位置的控件。刚开始还以为这是一种控件,于是去查SDK文档,找了好一会都没有找到。于是在午休的时候想了想,终于想通了,这东西其实我们完全可以自己去做的,而且原理是相当的简单的。
 
好了,废话不多说,我们就来做一个。
 
首先这样的程序涉及到页面的切换,那么我们就先建立一个ViewFlipper来存放每一个View视图。。
 
其次我说想通了,想通的就是这个小圆圈控件我们完全可以自己去做一个,而且原理很简单,简单到一个LinearLayout就能实现。
 
我们主要布局结构为:
 
<RelativeLayout>
 
<ViewFlipper></ViewFlipper>//这里显示的就是切换的图
 
<LinearLayout></LinearLayout>//这里显示的小圆圈之间的切换
 
<RelativeLayout>
 
 
代码如下,这里使用的是纯代码布局,不需要用到xml文件。
public class MyViewFlipper extends RelativeLayout implements OnTouchListener,OnGestureListener{
	
	private ViewFlipper viewflipper;
	private LogView logView;
	private Context parentContext;
	TextView textView;
	TextView[] textViews;
	RFIDDAQ rfiddaq;
	final static int viewflipperid=100;
	GestureDetector detector;//创建手势监听的对象
	
	/**
	 * 再次匹配的时间间隔 单位 秒
	 */
	private int time;
	private String address;
	private int maxshownum;//显示的最大数量,超过这个数量会刷新掉之前的数据。
	
	public MyViewFlipper(Context context) {
		super(context);
		this.parentContext=context;
		 detector=new GestureDetector(this);  
		 init();
	}

	private void init() {
		// TODO Auto-generated method stub
		// 创建滚动显示框对象
		viewflipper = new ViewFlipper(parentContext);
		viewflipper.setBackgroundColor(Color.CYAN);
		viewflipper.setId(viewflipperid);
		LayoutParams lpviewflipper = new LayoutParams(-1, 500);

		// 创建信息采集框对象,放入viewflipper中作为元素之一
		//这里的rfiddaq以及下面的都可以logView都可以替换成自定义的View视图。当然也可以添加新的自定义试图,只需要添加到viewflipper中就可以了。
		rfiddaq = new RFIDDAQ();
		lpviewflipper.addRule(RelativeLayout.ALIGN_PARENT_TOP);
		viewflipper.addView(rfiddaq);

		// 创建logView显示界面,放入viewflipper中作为元素之一
		logView = new LogView(parentContext);
		viewflipper.addView(logView);

		// 这里添加的LinearLayout是包含小圆点的集合
		LinearLayout viewGroup = new LinearLayout(parentContext);
		ViewGroup group = (ViewGroup) viewGroup;
		textViews = new TextView[viewflipper.getChildCount()];
		for (int i = 0; i < viewflipper.getChildCount(); i++) {
			textView = new TextView(parentContext);
			textView.setLayoutParams(new LayoutParams(30, 30));
			textView.setPadding(0, 0, 2, 0);
			textViews[i] = textView;
			if (i == 0) {
				// 默认进入程序后第一张图片被选中,因为viewflipper默认就是选中第一个视图
				textViews[i].setBackgroundResource(R.drawable.radio_sel);
			} else {
				textViews[i].setBackgroundResource(R.drawable.radio);
			}
			group.addView(textViews[i]);
		}
		// 设置小圆圈的位置
		LayoutParams lpgroup = new LayoutParams(-2, -2);
		lpgroup.addRule(RelativeLayout.BELOW, viewflipperid);
		lpgroup.addRule(RelativeLayout.CENTER_HORIZONTAL);

		// 把viewflipper和显示小圆圈框的viewGroup放入RelativeLayout中
		addView(viewflipper, lpviewflipper);
		addView(viewGroup, lpgroup);
		viewflipper.setOnTouchListener(this);//添加动作监听
		viewflipper.setLongClickable(true);//这一句必须添加,否则手势监听无法触发
	}

	public RFIDDAQ getRfiddaq() {
		return rfiddaq;
	}

	public void setRfiddaq(RFIDDAQ rfiddaq) {
		this.rfiddaq = rfiddaq;
	}

	
	
	@Override
	public boolean onDown(MotionEvent e) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
		// TODO Auto-generated method stub
		if(e2.getX()-e1.getX()>0){<div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><b>[java]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a><div style="position: absolute; left: 0px; top: 0px; width: 0px; height: 0px; z-index: 99;"><embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="0" height="0" name="ZeroClipboardMovie_2" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&width=0&height=0" wmode="transparent"></div></div></div><ol start="1" class="dp-j"><li class="alt"><span><span class="comment">//如果滑动到最后 则停止切换 </span><span>  </span></span></li><li class=""><span>             <span class="keyword">if</span><span>(viewflipper.getDisplayedChild() == </span><span class="number">0</span><span>){   </span></span></li><li class="alt"><span>                 viewflipper.stopFlipping();  </span></li><li class=""><span>                }<span class="keyword">else</span><span>{    </span></span></li><li class="alt"><span>                    <span class="comment">/**</span> </span></li><li class=""><span><span class="comment">                     * 这里其实可以添加一些动画效果。</span> </span></li><li class="alt"><span><span class="comment">                     * 如:viewflipper.setInAnimation(parentC
补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,