职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 720|回复: 4

android触屏移动

[复制链接]
能文能武 发表于 2011-7-29 09:23 | 显示全部楼层 |阅读模式
最近在Android上面试了下手。做了一个日历。网上的日历都可以用手触摸拖动转换月份和年,小弟刚学,不知道实现,就在网上找了一些大侠的文章,学习后基本上实现了我要的效果。

  
public class DayCell extends View   implements GestureDetector.OnGestureListener {   
    GestureDetector mGestureDetector;   
....   
    public DayCell(Context context) {   
        super(context);   
        setFocusable(true);   
        mGestureDetector = new GestureDetector(DayCell.this);   
        //setLongClickable(true);   
    }   
......   
    @Override  
    public boolean onTouchEvent(MotionEvent event) {   
      return mGestureDetector.onTouchEvent(event);   
    }   
  @Override  
  public boolean onDown(MotionEvent e) {   
    return true;//一定的返回true,如果不是好像没有反应。   
  }   
  
  @Override  
  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {   
    // 左   
    if (e1.getX() - e2.getX() > 100 && Math.abs(velocityX) > 200) {//移动的距离和速度   
      ...   
    } // 右   
    else if (e2.getX() - e1.getX() > 100 && Math.abs(velocityX) > 200) {   
      ...   
    }//上   
    else if (e1.getY() - e2.getY() > 100 && Math.abs(velocityY) > 200) {   
    ...   
    } // 下   
    else if (e2.getY() - e1.getY() > 100 && Math.abs(velocityY) > 200) {   
     ...   
    }   
    return true;   
  }   
  
  @Override  
  public void onLongPress(MotionEvent e) {   
      
  }   
  
  @Override  
  public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {   
    // TODO Auto-generated method stub   
    return false;   
  }   
  
  @Override  
  public void onShowPress(MotionEvent e) {   
      
  }   
  
  @Override  
  public boolean onSingleTapUp(MotionEvent e) {   
  ..   
    return true;   
  }   
}  

public class DayCell extends View   implements GestureDetector.OnGestureListener {
        GestureDetector mGestureDetector;
....
        public DayCell(Context context) {
                super(context);
                setFocusable(true);
                mGestureDetector = new GestureDetector(DayCell.this);
                //setLongClickable(true);
        }
......
        @Override
        public boolean onTouchEvent(MotionEvent event) {
          return mGestureDetector.onTouchEvent(event);
        }
  @Override
  public boolean onDown(MotionEvent e) {
    return true;//一定的返回true,如果不是好像没有反应。
  }

  @Override
  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    // 左
    if (e1.getX() - e2.getX() > 100 && Math.abs(velocityX) > 200) {//移动的距离和速度
      ...
    } // 右
    else if (e2.getX() - e1.getX() > 100 && Math.abs(velocityX) > 200) {
      ...
    }//上
    else if (e1.getY() - e2.getY() > 100 && Math.abs(velocityY) > 200) {
    ...
    } // 下
    else if (e2.getY() - e1.getY() > 100 && Math.abs(velocityY) > 200) {
     ...
    }
    return true;
  }

  @Override
  public void onLongPress(MotionEvent e) {
   
  }

  @Override
  public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    // TODO Auto-generated method stub
    return false;
  }

  @Override
  public void onShowPress(MotionEvent e) {
   
  }

  @Override
  public boolean onSingleTapUp(MotionEvent e) {
  ..
    return true;
  }
} 主要的代码就上面,里面各个方法的作用网上的前辈们都写的很清楚 。有一点注意的就是onDown( MotionEvent e )一定的返回true。如果是在Activity那就还得实现 OnTouchListener接口。


叫我小乖 发表于 2011-7-29 09:23 | 显示全部楼层
有效果图吗

叫我小乖 发表于 2011-7-29 09:24 | 显示全部楼层
能把你这个源码发给我一份吗?谢谢。

邮箱:wangjing19872006@163.com

我拿来学习下。


ksdal 发表于 2011-8-7 11:47 | 显示全部楼层
哦...这个...偶昨天就看了....
Jethro 发表于 2011-8-13 11:34 | 显示全部楼层
呵呵 都没人想我~~
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-2 20:16 , Processed in 0.124499 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表