Android笔记----Android手势和ContentProvider

手势(Gesture)

ContentProvider简介

操作系统的ContentProvider

实现ContentProvider

监听ContentProvider的数据改变

 

 

 

 

 

手势(Gesture)

        所谓手势,指用户手指或触摸笔在触摸屏上的连续触碰行为。手势这种连续的触碰会形成某个方向上的移动趋势,也会形成一个不规则的几何图形。

Android对两种手势行为都提供了支持:

第一种手势行为而言,Android提供了手势检测,并为手势提供相应的监听器。

对于第二种手势行为,Android允许开发者添加手势,并提供相应的API

1.1 手势检测

       GestureDetector是一个手势检测器,创建GestureDetector时需要传入一个GestureDetector.OnGestureListener实例, 负责对用户的手势行为提供响应。GestureDetector包含的事件处理方法如下:

       boolean onDown(MotionEvent e):当触碰事件按下时触发该方法。

       boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) :在触摸屏上拖过时触发该方法。

       void onLongPress(MotionEvent e):当用户在屏幕上长按时触发该方法。

       boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):当用户在屏幕上”滚动”时触发该方法。

       void onShowPress(MotionEvent e) :当用户在触摸屏上按下、而且还未移动和松开时触发该方法。

       boolean onSingleTapConfirmed(MotionEvent e)

       boolean onSingleTapUp(MotionEvent e):用户在屏幕上的轻击事件将会触发该方法。

使用Android手势检测只需要两个步骤:

       创建一个GestureDetector对象,创建该对象时必须实现GestureDetector.OnGestureListener监听器实例。

       为应用程序的ActivityTouchEvent事件绑定监听器,在事件处理中指定把Activity上的TouchEvent事件交给GestureDetector处理。

 

例:手势动作测试:

手势动作测试

GestureTest.java

public class GestureTest extends Activity
	implements OnGestureListener
{
	// 定义手势检测器实例
	GestureDetector detector;	
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		//创建手势检测器
		detector = new GestureDetector(this);		
	}
	//将该Activity上的触碰事件交给GestureDetector处理
	@Override
	public boolean onTouchEvent(MotionEvent me)
	{
		return detector.onTouchEvent(me);
	}	
	@Override
	public boolean onDown(MotionEvent arg0)
	{
		Toast.makeText(this,"onDown" , 8000)
			.show();
		return false;
	}
	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
		float velocityY)
	{
		Toast.makeText(this , "onFling" , 8000)
			.show();
		return false;
	}
	@Override
	public void onLongPress(MotionEvent e)
	{
		Toast.makeText(this ,"onLongPress" , 8000)
			.show();		
	}
	@Override
	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
		float distanceY)
	{
		Toast.makeText(this ,"onScroll" , 8000)
			.show();	
		return false;
	}
	@Override
	public void onShowPress(MotionEvent e)
	{
		Toast.makeText(this ,"onShowPress" , 8000)
			.show();		
	}
	@Override
	public boolean onSingleTapUp(MotionEvent e)
	{
		Toast.makeText(this ,"onSingleTapUp" , 8000)
			.show();
		return false;
	}
}

 

例:手势实现翻页效果:

GestureFlip.java

public class GestureFlip extends Activity
	implements OnGestureListener
{
	// ViewFlipper实例
	ViewFlipper flipper;
	// 定义手势检测器实例
	GestureDetector detector;
	//定义一个动画数组,用于为ViewFlipper指定切换动画效果
	Animation[] animations = new Animation[4];
	//定义手势动作两点之间的最小距离
	final int FLIP_DISTANCE = 50;
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		//创建手势检测器
		detector = new GestureDetector(this);
		// 获得ViewFlipper实例
		flipper = (ViewFlipper) this.findViewById(R.id.flipper);
		// 为ViewFlipper添加5个ImageView组件
		flipper.addView(addImageView(R.drawable.java));
		flipper.addView(addImageView(R.drawable.ee));
		flipper.addView(addImageView(R.drawable.ajax));
		flipper.addView(addImageView(R.drawable.xml));
		flipper.addView(addImageView(R.drawable.classic));
		//初始化Animation数组
		animations[0] = AnimationUtils.loadAnimation(this
			, R.anim.left_in);
		animations[1] = AnimationUtils.loadAnimation(this
			, R.anim.left_out);
		animations[2] = AnimationUtils.loadAnimation(this
			, R.anim.right_in);
		animations[3] = AnimationUtils.loadAnimation(this
			, R.anim.right_out);
	}

	// 定义添加ImageView的工具方法
	private View addImageView(int resId)
	{
		ImageView imageView = new ImageView(this);
		imageView.setImageResource(resId);
		imageView.setScaleType(ImageView.ScaleType.CENTER);
		return imageView;
	}

	@Override
	public boolean onFling(MotionEvent event1, MotionEvent event2,
		float velocityX, float velocityY)
	{
		/*
		 * 如果第一个触点事件的X座标大于第二个触点事件的X座标超过FLIP_DISTANCE
		 * 也就是手势从右向左滑。
		 */
		if (event1.getX() - event2.getX() > FLIP_DISTANCE)
		{
			// 为flipper设置切换的的动画效果
			flipper.setInAnimation(animations[0]);
			flipper.setOutAnimation(animations[1]);
			flipper.showPrevious();
			return true;
		}
		/*
		 * 如果第二个触点事件的X座标大于第一个触点事件的X座标超过FLIP_DISTANCE 
		 * 也就是手势从右向左滑。
		 */
		else if (event2.getX() - event1.getX() > FLIP_DISTANCE)
		{
			// 为flipper设置切换的的动画效果
			flipper.setInAnimation(animations[2]);
			flipper.setOutAnimation(animations[3]);
			flipper.showNext();
			return true;
		}
		return false;
	}
	@Override
	public boolean onTouchEvent(MotionEvent event)
	{
		//将该Activity上的触碰事件交给GestureDetector处理
		return detector.onTouchEvent(event);
	}	
	
	@Override
	public boolean onDown(MotionEvent arg0)
	{
		return false;
	}
	@Override
	public void onLongPress(MotionEvent event)
	{
	}
	@Override
	public boolean onScroll(MotionEvent event1, MotionEvent event2,
		float arg2, float arg3)
	{
		return false;
	}

	@Override
	public void onShowPress(MotionEvent event)
	{
	}
	@Override
	public boolean onSingleTapUp(MotionEvent event)
	{
		return false;
	}	
}

 

Main.xm

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值