触摸[2] 拖动
来源:互联网 发布:弱视网络训练软件 编辑:程序博客网 时间:2024/05/18 17:25
【参考链接】
以如下应用场景为例,在FrameLayout中有一个MyTextView,当手指在MyTextView上触摸时,MyTextView随着手指而移动。
主要是事件处理结合《View的长宽及其在父ViewGroup中的位置,如何改变?》中的方法来使用
此外,如果该View设置了onClickListener,则在手指离开屏幕ACTION_UP以后还会触发onClickListener
如果希望发生拖动时不触发onClick,可以增加一个变量来控制
public classMyTextViewextendsTextView {
private intlastX;
private int lastY;
private boolean callOnClick=true;
public MyTextView(Context context) {
super(context);
init();
}
publicMyTextView(Context context,AttributeSet attrs) {
super(context,attrs);
init();
}
publicMyTextView(Context context,AttributeSet attrs, intdefStyleAttr) {
super(context,attrs,defStyleAttr);
init();
}
private voidinit(){
setOnClickListener(newOnClickListener() {
@Override
public voidonClick(View v) {
if(callOnClick)
Toast.makeText(getContext(),"onClick!",Toast.LENGTH_SHORT).show();
}
});
}
@Override
public booleanonTouchEvent(MotionEvent event) {
super.onTouchEvent(event);//for onClick/onLongClick
switch(event.getAction()){
caseMotionEvent.ACTION_DOWN:
lastX=(int) event.getRawX();
lastY= (int) event.getRawY();
callOnClick=true;
break;
case MotionEvent.ACTION_MOVE:
intnewX= (int) event.getRawX();
int newY= (int) event.getRawY();
int deltaX=newX-lastX;
int deltaY=newY-lastY;
//这里就不加了,不然拖动的断断续续
// int touchSlop=ViewConfiguration.get(this.getContext()).getScaledTouchSlop();
// if(Math.abs(deltaX)>touchSlop || Math.abs(deltaY)>touchSlop){
//因为这个例子中FrameLayout里面只有这个MyTextView,所以可以用setLayoutParams()实现效果
//并且不要求改变大小,所以也可以用layout()实现
// FrameLayout.LayoutParamsparams=(FrameLayout.LayoutParams)this.getLayoutParams();
// params.leftMargin+=deltaX;
// params.topMargin+=deltaY;
// setLayoutParams(params);
// requestLayout();
layout(getLeft()+deltaX,getTop()+deltaY,getRight()+deltaX,getBottom()+deltaY);
//更新坐标
lastX=newX;
lastY=newY;
// }
callOnClick=false;
break;
case MotionEvent.ACTION_UP:
caseMotionEvent.ACTION_CANCEL:
lastX=(int) event.getRawX();
lastY= (int) event.getRawY();
callOnClick=true;
break;
default:
break;
}
return true;
}
}
- 触摸[2] 拖动
- Windows Phone 触摸拖动
- JavaScript: 让拖动支持iphone/ipad触摸
- JavaScript: 让拖动支持iphone/ipad触摸
- U3D判断触摸拖动的方向
- JavaScript: 让拖动支持iphone/ipad触摸【转自qiqiboy】
- CCTouch的单点触摸与精灵拖动(1)
- 47_拖动控件,控件的触摸事件
- [手势与触摸]创建可以拖动的视图
- 安卓巨图加载及触摸拖动浏览,仿鸿洋大神使用BitmapRegionDecoder。
- 19.实现多点触摸画圆(拖动+检测手机多点触摸的点数+随机颜色)
- 在禁止了页面的触摸拖动事件之后如何允许某div可以拖动
- 触摸手势识别2
- Android学习笔记_38_图片的拖动、缩放功能和多点触摸
- cocos2dx中用触摸机制实现在一个方向上拖动精灵。
- 【Android】下拉列表、拖动条、星级评分条与标签文本的触摸事件
- [手势与触摸]用拖动手势识别器实现可供拖拽的视图
- 基于zepto的H5/移动端tab切换触摸拖动加载更多数据
- ANR超时时间的定义
- linux服务器下VIM显示中文乱码
- Andriod Studio项目结构介绍
- 站在富士康的厂房里看建造者设计模式
- ImageLoader要求
- 触摸[2] 拖动
- gcc中-c和-o参数
- 指定栈的进栈顺序,输出所有可能的出栈顺序
- Druid 介绍及配置
- Android开发工具类
- requestWindowFeature
- Redis数据结构简介
- XCTF:练习CTF解题XMAN比赛 8-8 login
- ELK之logstash长久运行