最近在搞软件杯的事,要提取按键时的具体信息,包括按下去的时间和弹起的时间,还有按的是哪个键等等,发现用普通的OnClickListener无法做到,于是乎查了一下,就用OnTouchListener这个监听器来做...而我以前喜欢用的是用匿名内部类的方法,使用新建的类有个好处就是可以使代码简化 //对于到底是哪个按键调用的,利用了getId()这个方法就可以 public class TimeListener implements OnTouchListener
OnTouchListene是用来监听手机屏幕事件的监听,用来处理按下,抬起,滑动等动作 具体的有3中情况:UP抬起 DOWN按下 MOVE滑动 使用: 在Activity中,实现OnTouchListener...setOnTouchListener 最后可以根据ID的不同,对不同的控件按下,抬起,滑动事件做不同的处理 通常在设计UI界面时,为了用户体验更好,通常在用户按下某个控件之后会有相应的小范围变大效果,在弹起之后,会恢复原样,这里可以用OnTouchListener...android:toYScale="100%" android:pivotX="50%" android:pivotY="50%" android:fillAfter="true" ②实现OnTouchListener
, 都设置在 View 的 View.ListenerInfo 类型成员中 ; 判断该组件是否被用户设置了 触摸监听器 OnTouchListener , 如果设置了 , 则执行被用户设置的 触摸监听器...OnTouchListener ; 如果用户设置的 触摸监听器 OnTouchListener 触摸方法返回 true , 此时该分发方法的返回值就是 true ; public class View...// 触摸监听器 OnTouchListener 返回 false , 点击监听器 OnClickListener 才能被调用到 if (!...// 触摸监听器 OnTouchListener 返回 false , 点击监听器 OnClickListener 才能被调用到 if (!...// 触摸监听器 OnTouchListener 返回 false , 点击监听器 OnClickListener 才能被调用到 if (!
可以发现执行的顺序是: OnTouchListener.DOWN -> OnTouchEvent.DOWN -> OnTouchListener.MOVE -> OnTouchEvent.MOVE ->...OnTouchListener.UP-> OnTouchEvent.UP-> OnClickListener 从这我们就可以猜想执行的优先级为 OnTouchListener > onTouchEvent...这时候执行的顺序如下: OnTouchListener.DOWN ->OnTouchListener.MOVE-> OnTouchListener.UP 这里验证了我的猜想,可以得到如下结论 View...和我们想的一致,这时候执行顺序变为: OnTouchListener.DOWN ->OnTouchEvent.DOWN-> OnTouchListener.MOVE -> OnTouchEvent.MOVE...从这我们就可以知道OnTouchListener的优先级大于onTouchEvent。
import com.gdc.control.R; public class ClearableEditText extends AppCompatEditText implements View.OnTouchListener...private Drawable clearTextIcon; private OnFocusChangeListener mOnFocusChangeListener; private OnTouchListener...{ mOnFocusChangeListener = onFocusChangeListener; } @Override public void setOnTouchListener(final OnTouchListener...onTouchListener) { mOnTouchListener = onTouchListener; } private void init(final Context context) {
onTouchEvent(event)) { result = true; } } public void setOnTouchListener(OnTouchListener...监听,这会会执行OnTouchListener的监听,如果onTouchLister return true,则表示事件被消费掉了,会直接return true,事件分发结束;可以重写setOnTouchListener...分析4:OnTouchListener中返回false,则会往下执行onTouchEvent(ev)方法,onTouchEvent(ev)中会执行performClick()方法,这时如果view设置了...这里也可以看到,onTouchListener的执行会先于onClickListener....监听,onTouchListener return false,后面才会执行view 的onClick监听。
); // 设置触摸事件监听对象 } /* * 自定义触摸事件的监听对象 */ private View.OnTouchListener onTouchListener...= new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent...最后还有一个问题:当一个 View 中既有 onTouchEvent 方法并且设置了 OnTouchListener 接口时,情况是怎样的呢?...接口的 onTouch 方法的优先级是高于 View 里面自带的 onTouchEvent 方法的,当 View 设置了 OnTouchListener 接口并且 onTouch 方法返回 true...所以说 OnTouchListener 接口和 View 中自带的 onTouchEvent 方法是不能同时使用的。有兴趣的小伙伴可以自己去试验一下。Ok,这个问题就解决了。
private OnTouchListener buttonconnect1Touch = new OnTouchListener() { @Override...buttonconnect1Touch = new OnTouchListener() { @Override public boolean onTouch...buttonconnect1Touch = new OnTouchListener() { @Override public boolean onTouch...buttonconnect1Touch = new OnTouchListener() { @Override public boolean onTouch...buttonconnect1Touch = new OnTouchListener() { @Override public boolean onTouch
布局文件就一个button 代码如下: button.setOnTouchListener(new OnTouchListener() { int lastX...是表示组件相对于自身左上角的x坐标,而getRawX()是表示相对于屏幕左上角的x坐标值(注意:这个屏幕左上角是手机屏幕左上角,不管activity是否有titleBar或是否全屏幕) 如果你的某个Activity中实现OnTouchListener...下面简单来讲讲onTouch和onTouchEvent的区别 onTouch:属于某个组件的OnTouchListener接口,点击组件有效 onTouchEvent:属于Activity,点击全屏幕有效
接下来,我们给EventBtn添加onTouchListener,并返回true ? 运行App,查看打印的日志, ? ...我们看到,没有打印 btn clicked日志,验证了我们说明的View事件传递的第一部分,触摸事件ev,优先被onTouchListener消费掉了,后面的onTouchEvent和onClickListener...下面我们将onTouchListener的返回值改为false,并重写EventBtn onTouchEvent方法,并返回true。 ? 运行App,点击按钮,查看打印的日志, ? ...这也验证了我们关于View触摸事件传递的第二部分,触摸事件ev优先被onTouchListener消费,然后再让传递给onTouchEvent消费。 ...看到源码,很一目了然,框架先调用onTouchListener,如果事件没有被消费掉,再调用onTouchEvent,最后result表示此触摸事件是否被消费,作为返回值。
google-map-fragment-scrolling-inside-nestedscrollview */ public class MySupportMapFragment extends SupportMapFragment { private OnTouchListener...ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); return layout; } public void setListener(OnTouchListener...listener) { mListener = listener; } public interface OnTouchListener { public
0x02 事件分发的优先级 同时重写View中的onTouchEvent,设置View的onTouchListener与onClickListener 首先调用onTouchListener,若返回值为...总结:优先级顺序:onTouchListener>onTouchEvent>onClick 0x03 事件回传过程 ?
的使用,,找度娘,我也是找的度娘,不要偷懒呦 //前进 private OnTouchListener forwordButtonTouch = new OnTouchListener() {...forwordButtonTouch = new OnTouchListener() { @Override public boolean onTouch...backButtonTouch = new OnTouchListener() { @Override public boolean...leftButtonTouch = new OnTouchListener() { @Override public boolean onTouch(...righButtonTouch = new OnTouchListener() { @Override public boolean onTouch(
setOnTouchListener() 或者是对你的自定义控件重写onTouchEvent方法时会出现这个警告,警告内容全文如下 If a View that overrides onTouchEvent or uses an OnTouchListener...大概的意思是说 如果一个覆盖了onTouchEvent方法或者使用了OnTouchListener的控件没有引用performClick并且调用它的点击事件被拦截,控件可能不能合适的处理访问操作。...Warning,那么除了在控件内重写performClick()外,也需要在onTouch()中调用performClick(): button.setOnTouchListener(new View.OnTouchListener
拍照功能大家肯定都知道,这个就不多解释,那么我们直接通过setOnTouchListener方法对View进行监听即可 surfaceView.setOnTouchListener(new View.OnTouchListener...1000,-1000]到[1000,1000],那么通过下面的坐标换算公式,我们就可以得到点击预览画面时,映射区域的坐标值了 surfaceView.setOnTouchListener(new View.OnTouchListener...}); 获取到映射区域的坐标后,我们就要设置一个对焦的范围了,范围是灵活的,我这里就创建一个长宽是200的矩形区域 surfaceView.setOnTouchListener(new View.OnTouchListener...return false; } }); 设置对焦和测光 完成这一步,那就已经实现了手动对焦了,如下代码: surfaceView.setOnTouchListener(new View.OnTouchListener
android.util.DisplayMetrics; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener...movingEventListener); img2.setOnTouchListener(movingEventListener); } private OnTouchListener...movingEventListener = new OnTouchListener() { int lastX, lastY; @Override
mButton = (Button) findViewById(R.id.id_btn); mButton.setOnTouchListener(new OnTouchListener...} return false; } }); } } 在MainActivity中,我们还给MyButton设置了OnTouchListener... * @param l the touch listener to attach to this view */ public void setOnTouchListener(OnTouchListener...View的事件转发流程是: View.dispatchEvent->View.setOnTouchListener->View.onTouchEvent 在dispatchTouchEvent中会进行OnTouchListener...的判断,如果OnTouchListener不为null且返回true,则表示事件被消费,onTouchEvent不会被执行;否则执行onTouchEvent。
android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener...android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener...popupWindow.setTouchable(true); popupWindow.setTouchInterceptor(new OnTouchListener
public void onMenuCollapsed() { } }); } } 为了实现点击屏幕其他地方隐藏fab,需要实现onTouchListener...public class FabFragment extends Fragment implements View.OnClickListener, View.OnTouchListener {
Canvas(bitmap) 调用Canvas对象的drawColor()方法,初始化背景颜色,参数:Color.WHITE白色 调用ImageView对象的setOnTouchListener()方法,参数:OnTouchListener...android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener...); canvas.drawColor(Color.WHITE); // 设置手指滑动事件 iv_img.setOnTouchListener(new OnTouchListener
领取专属 10元无门槛券
手把手带您无忧上云