源码传送门:https://github.com/xytyl/SwipeEditText/tree/master
惯例先来看效果图:
最近产品同学的需求,要求定制一个可拖拽可编辑的文本,原本觉得还挺简单,不就是写个EditText处理一下touch事件么,后来做了发现还有些小坑,记录一下,顺便给大家做个参考。
试错
首先我尝试自定义一个EditText,重写onTouchEvent()方法,在其中做随手势的操作,代码比较简单就不贴了,但是重写之后点击无法唤出软键盘,看了一下在TextView的源码中有关于软键盘的部分,尝试了一下自行唤醒未果,由于开发时间紧张所以没有深入研究,后期会补上,于是换了另一种方式。
实现方法
自定义一个FrameLayout,在里面放一个EditText,触摸事件交给外层FrameLayout处理,这里采用内部拦截法。
首先是父View的onInterceptTouchEvent()方法,用来拦截事件:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
lastX = (int) ev.getRawX();
lastY = (int) ev.getRawY();
return false;
}
return true;
}
然后是EditText的dispatchTouchEvent()方法,内部判断是否需要请求父View不要拦截:
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
switch