View实现事件监听DEMO(文本跟随触屏事件)

View 是一个显示的视图,内置的画布通过重写Ondraw(Canvas canvas);方法获得,同时提供图形绘制函数、触屏事件、按键事件等。

现在利用一个简单的demo演示一下几个重要的常用到的方法:

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;

public class MView extends View {
    private int x = 20;
    private int y = 20;

    public MView(Context context){
        super(context);
        setFocusable(true);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        Paint paint = new Paint();
        paint.setColor(Color.BLUE);
        canvas.drawColor(Color.BLACK);
        canvas.drawText("NEW GAME", x, y, paint);

    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub

        return super.onKeyDown(keyCode, event);

    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        return super.onKeyUp(keyCode, event);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        x = (int)event.getX();
        y = (int)event.getY();
//        invalidate();
        postInvalidate();
        return true;
    }

}

需要注意的是,这里的触屏或者点击事件相应其实是简化了的,因为用户在和屏幕交互的时候不管是点击还是滑动还是触摸都会获得我们本例所需要的坐标值,所以我们可以笼统的写成上面这个样子而在构造函数中我们还应该设置焦点:setFocusable(true);要不然在点击屏幕的时候是不会接受到响应的;最后一点如果不加上invalidate();或者postInvalidate();的话,点击屏幕的操作也不会有反应,因为canvas初始只执行一次,当前的点击操作是不会显示在原来的canvas上面的所以必须“更新”屏幕的canvas这样子才能够看到执行的操作。这里又引申了另外一个问题,即invalidate();和postInvalidate();的区别在哪里:invalidate();是不能够在当前线程中循环调用执行的,此处说的线程不是UI主线程,而是自己创建的子线程。postInvalidate();则可以在自己的子线程中循环调用执行。当然了,如果不在子线程当中循环执行调用的话,那么两个方法都是可以使用的。执行效果如下(文字会跟着触屏等事件移动):

View实现事件监听DEMO(文本跟随触屏事件)

时间: 2024-12-04 23:40:30

View实现事件监听DEMO(文本跟随触屏事件)的相关文章

事件监听:诀别Android繁琐的事件注册机制——view.setOnXXXXListener 滚犊子

好久没写过随笔了......windows phone生态没起来,属于.net阵营的我最近工作不是太忙,闲暇之余就心血来潮开始研究安卓.先简单扯两句这几天学习下来对java事件监听机制的一点感触.客观地讲,java的事件监听机制相比.net好原始,暂不说委托.lamda.泛型等的繁琐,仅一个事件监听,就需要各种listener才能实现,比如安卓里到处都是view.setOnXXXXListener.被C#“语法糖”和宇宙第一IDE惯坏的我真心有点不习惯,于是就决定写个工具来封装这些烦人的list

Ext JS 5的声明式事件监听

原文:Declarative Listeners in Ext JS 5 在前文<在Ext JS 5使用ViewControllers>中,简单的介绍了Ext JS 5的一项重要改进--声明式事件监听.在本文,将深度探讨如何使用声明式事件监听啦简化应用程序的视图并减少自定义组件的样板代码. 注意:文章假设你使用的是Ext JS 5.0.1或更高版本. 什么是声明式事件监听? 所谓的"声明式事件监听",就是指定义在类主体中的监听或在实例的配置对象中使用了listeners配置

[JS]笔记12之事件机制--事件冒泡和捕获--事件监听--阻止事件传播

-->事件冒泡和捕获-->事件监听-->阻止事件传播 一.事件冒泡和捕获 1.概念:当给子元素和父元素定义了相同的事件,比如都定义了onclick事件,点击子元素时,父元素的onclick事件也会被触发.js里称这种事件连续发生的机制为事件冒泡或者事件捕获.IE浏览器:事件从里向外发生,事件从最精确对象(target)开始触发,然后到最不精确的对象(document)触发,即事件冒泡 Netscape:事件从外向里发生,事件从最不精确的对象(document)开始触发,然后到最精确对象(

html学习 - jquery事件监听详解

html学习 - jquery事件监听详解 html学习 - jquery事件监听详解 监听方法 监听方法参数解释 click参数 事件自动执行问题解决 bind方法 live方法 监听方法 在jquery里,监听的方法比较多,用的最多的就是简单的.click() .onchange() .pressdown() 所以这样很简单啊,直接使用就好了,只要符合参数规范就可以了.除了这个还有bind() live() 方法. 而addEventListener()同bind()方法是没有很大功能上的区

js基础——事件绑定(事件监听)

JavaScript事件一共有三种监听方法分别如下: 1.事件监听一夹杂在html标签内 1 <div id="box" onClick="alert('HELLO WORLD')"> 2 <div id="box2" onClick="notice();"></div> 3 <div id="box3" onClick="service('HELLO W

SpringBoot事件监听

SpringBoot事件监听 springBoot事件监听流程 1 自定义事件,一般是继承ApplicationEvent抽象类 /** * 定义事件 **/ public class MyApplicationEvent extends ApplicationEvent { private static final long serialVersionUID = 787751246882182041L; public MyApplicationEvent(Object source) { su

浏览器默认事件,事件监听,事件委托

浏览器的常见默认行为 图片,文字可以脱出爱 a标签可以进行跳转 右键是菜单 submit可以进行提交 右键菜单触发,可以作为一个事件 document.oncontext=function(e){ alert(1); } 可以阻止浏览器默认行为 return false;    可以实现,但不推荐使用,老师就是这么说的. 还有就是时间对象提供的方法:e.preventDefault()   或e.returnValue=false;后者为了兼容该死的IE低版本 例: DOM,一般的事件都是0级事

Java事件监听机制与观察者设计模式

一. Java事件监听机制 1. 事件监听三要素: 事件源,事件对象,事件监听器 2. 三要素之间的关系:事件源注册事件监听器后,当事件源上发生某个动作时,事件源就会调用事件监听的一个方法,并将事件对象传递进去,开发者可以利用事件对象操作事件源. 3. 入门程序 1 /** 2 * Created by IntelliJ IDEA. 3 * 4 * @Auther: ShaoHsiung 5 * @Date: 2018/8/29 21:25 6 * @Title: 事件监听入门程序 7 * @D

c++中怎么自定义事件监听(回调函数)

废话不多说,上代码: 1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 class A 5 { 6 private: 7 int a = 5; 8 vector<void(*)(int)> funcs; 9 public: 10 void setA(int a_); 11 void registerCallback(void(*p)(int)); 12 }; 13 14 void dis