用手指移动画面里的照片————onTouchEvent 事件

本示例实现  通过手指来移动手机上的照片

程序原理是:  使用 ImageView 包含的Drawable 图片,照片在程序运行的一开始,就放在屏幕的中央。 通过 实现 onTouchEvent 来处理按下 (ACTION_DOWN)、 拖动(ACTION_MOVE)、 放开(ACTION_UP)  等事件来完成拖动图片的效果。  另外设置 ImageView 的 onClickListener 事件,在用户单击图片时,还原图片的初始位置.

要注意 3个  重点:

1.  通过 TouchEvent  重设图片的位置  setLayoutParams()

2.   取得屏幕大小范围,防止图片移出屏幕范围

3.  处理 onTouchEvent  事件,判断 User 操作行为

在 onTouchEvent()  方法中,针对 MotionEvent 的 ACTION_DOWN、ACTION_MOVE、ACTION_UP 动作, 自定义一个 picMove( ) 方法来重设图片位置。 

在picMove  () 方法中,先判断传入坐标的位置是否超过 屏幕的宽高,若已超过,则对传入的坐标进行调整,最后才是使用 ImageView  的 setLayoutParams () 方法,并添加一个AbsoluteLayout  对象。使用 AbsoluteLayout.LayoutParams () 方法带入宽、高、x坐标、y坐标等参数来重设图片显示的位置.

 /*移动图片的方法*/
  private void picMove(float x, float y)  {
    /*默认微调图片与指针的相对位置*/
    mX=x-(intWidth/2);
    mY=y-(intHeight/2);
    
    /*防图片超过屏幕的相关处理*/
    /*防止屏幕向右超过屏幕*/
    if((mX+intWidth)>intScreenX)   {
      mX = intScreenX-intWidth;
    }

    /*防止屏幕向左超过屏幕*/
    else if(mX<0)   {
      mX = 0;
    }
    /*防止屏幕向下超过屏幕*/
    else if ((mY+intHeight)>intScreenY)   {
      mY=intScreenY-intHeight;
    }
    /*防止屏幕向上超过屏幕*/
    else if (mY<0)   {
      mY = 0;
    }
    /*通过log 来查看图片位置*/
    Log.i("jay", Float.toString(mX)+","+Float.toString(mY));
    /* 以setLayoutParams方法,重新安排Layout上的位置 */
    mImageView01.setLayoutParams   (
      new AbsoluteLayout.LayoutParams
      (intWidth,intHeight,(int) mX,(int)mY)
    );
  }

示意图如下


在 使用 onTouchEvent  来实现触摸事件时,用到了 MotionEvent 对象,它可以用来判断单击触控屏幕的动作。MotionEvent 在 Android API中是一个通用的对象,可用来传递相关鼠标、触摸笔、手指与轨迹球等动作, 并返回绝对或相对的移动状态.

MotionEvent 对象提供了一些常用的常量, 用于判断动作.

               名              称       值                       说               明
         ACTION_CANCEL       3 
        ACTION_DOWN       0 
       ACTION_MOVE       2 
       ACTION_UP      1 
       CREATER  
       EDGE_BOTTOM      2        是否触及屏幕的下方边界
       EDGE_LEFT     4       是否触及屏幕的左方边界
       EDGE_RIGHT     8       是否触及屏幕的右方边界
      EDGE_TOP     1      是否触及屏幕的上方边界
   
   

本示例具体代码 请参见 EX07_04  工程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值