草庐IT

安卓初学者 : understanding MotionEvent actions

coder 2023-11-18 原文

我无法让我的 Activity 生成 MotionEvent.ACTION_UP。可能是初学者的错误。

在 LogCat 中,我只看到 ACTION_MOVE 事件(它是一个值为 3 的整数)。我还看到了 X/Y 坐标。没有 ACTION_DOWN 也没有 ACTION_UP。

我到处寻找解决方案。我在论坛上发现了一个问题,好像和我的问题一样,但是没有提出解决方案: http://groups.google.com/group/android-developers/browse_thread/thread/9a9c23e40f02c134/bf12b89561f204ad?lnk=gst&q=ACTION_UP#bf12b89561f204ad

这是我的代码:

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.webkit.WebView;

public class Brand extends Activity {

public WebView webview;
public float currentXPosition;
public float currentYPosition;

@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);

    webview = new WebView(this);
    setContentView(webview);
    webview.loadUrl("file:///android_asset/Brand.html");


 }

@Override
public boolean onTouchEvent(MotionEvent me) {

    int action = me.getAction();
    currentXPosition = me.getX();
    currentYPosition = me.getY();

    Log.v("MotionEvent", "Action = " + action);
    Log.v("MotionEvent", "X = " + currentXPosition + "Y = " + currentYPosition);

    if (action == MotionEvent.ACTION_MOVE) {
         // do something
    }


    if (action == MotionEvent.ACTION_UP) {
         // do something
    }

    return true;
  }

}

最佳答案

首先你需要关注Webview tutorialWebViewClient而不是默认浏览器来完成这项工作。否则,在加载网页后,您根本不会收到任何事件。

假设您想处理 Activity 中的事件,您可以添加方法 dispatchTouchEvent :

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    Log.v("FROM_DISPATCH_TOUCH_EVENT", "Action = " + ev.getAction());
    return false; 
}

您还将看到其他触摸事件。你应该在这个方法中处理它们。

另一种方法是注册一个 EventListener。你的类(class)将变成:

public class Brand extends Activity implements OnTouchListener {

onCreate() 中执行此操作:

webview.setOnTouchListener(this);

将其添加到 Activity 中:

@Override
public boolean onTouch(View v, MotionEvent event) {
   int action = event.getAction();
    float x = event.getX();
    float y = event.getY();

    Log.v("ON_TOUCH", "Action = " + action + " View:" + v.toString());
    Log.v("ON_TOUCH", "X = " + x + "Y = " + y);

return false;

然后从我的日志中我得到以下内容:

  1. dispatchTouchEvent() 首先被调用
  2. 然后调用onTouch()
  3. 然后View获取Event来处理
  4. 然后 onTouchEvent() 可能会获取事件(见下文)

此外,onTouch() 报告相对于 View,dispatchTouchEvent() 报告相对于 Display 的值。

为什么onTouchEvent不上报这些Events?与其中许多方法一样,onTouchEvent() 也有两种形式。

如果您覆盖 onTouchEvent()在您的 Activity 中,它充当“全部捕获” - 它仅处理 View 未使用的事件,例如,如果您在任何 View 外部点击,或这些 View 传递的事件。如果您覆盖 onTouchEvent()在您的 View 中,它应该处理该 View 中的事件。有时很容易混淆两者。

关于安卓初学者 : understanding MotionEvent actions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2609114/

有关安卓初学者 : understanding MotionEvent actions的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. ruby - 易于初学者理解的 Ruby 库 - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭3年前。Improvethisquestion我正处于学习Ruby的阶段,我想查看一些小型库的源代码以了解它们是如何构建的。我不知道什么是小型图书馆,但希望SO能推荐一些易于理解的图书馆来学习。因此,如果有人知道一两个非常小的库,这是新手Rubyists学习的好例子,请推荐!我想使用Manveru'sInnatelib,因为它试图保持在2000LOC以下,但我还不熟悉其中经常使用的Ruby速记。也许大约100-5

  3. ruby-on-rails - 如何销毁两个模型之间的所有关联数据? (Rails 初学者) - 2

    我有两个模型:store和category以及一个名为categories.stores的连接表。如何删除连接表中商店对象的所有关系数据?我可以使用其中之一吗:store.categories.destroy或category.stores.destroy注意:两个模型都是has_and_belongs_to_many(因此每个关联记录都没有标识符——只有store_id和category_id) 最佳答案 在has_and_belongs_to_many关联中,您可以使用delete_all或destroy_all。在has_ma

  4. ruby-on-rails - 将散列键转换为小写 -- Ruby 初学者 - 2

    我的表格字段名称是小写的,而我从CSV文件中获取的字段名称是驼峰式的。无论如何我可以将哈希数组的键转换为小写吗?这是我现在的代码:CSV.foreach(file,:headers=>true)do|row|Users.create!(row.to_hash)end这是失败的,因为键是驼峰式的(我已经通过手动编辑文件使标题行全部小写来验证这一点)。附言。我也很想知道为什么Rails开始时会考虑表字段名称的大小写敏感性? 最佳答案 您可以只对CSV使用header_converters选项:CSV.foreach(file,:head

  5. (一)专题介绍:移动端安卓手机改造成linux服务器&linux服务器中安装软件、部署前后端分离项目实战 - 2

    快捷目录前言一、涉及到的相关技术简介二、具体实现过程及踩坑杂谈1.安卓手机改造成linux系统实现方案2.改造后的手机Linux中软件的安装3.手机Linux中安装MySQL5.7踩坑实录4.手机Linux中安装软件的正确方法三、Linux服务器部署前后端分离项目流程1.前提准备(安装必要软件,搭建环境):2.前后端分离项目的详细部署过程:总结前言总体概述:本篇文章隶属于“手机改造服务器部署前后端分离项目”系列专栏,该专栏将分多个板块,每个板块独立成篇来详细记录:手机(安卓)改造成个人服务器(Linux)、Linux中安装软件、配置开发环境、部署JAVA+VUE+MySQL5.7前后端分离项目

  6. ruby-on-rails - 学习Ruby on Rails的初学者项目 - 2

    为了学习rubyonrails,可以构建哪些好的项目想法?有很多很棒的教程(rails3在运行,rails的敏捷web开发,railstutorial.org)但是它们都需要很长时间来浏览整本书。而且,它们为用户提供了即时的答案,而不是要求用户自己解决问题。什么是短而简单的项目,初学者可以尝试不只是遵循一个长教程?我认为一个博客和一个待办事项列表是很好的启动项目?还有什么?(项目应该让初学者接触到rest和crud) 最佳答案 一个好的开始是RailsforZombies我会去看看。如果你喜欢的话,CodeSchool有很多很棒的资

  7. ruby-on-rails - 什么被认为是好的规范?初学者的 Rspec 示例 - 2

    什么是可靠的规范?这就是我发现关于测试非常抽象的地方。我会对模型、Controller和其他任何可以测试的问题的答案感兴趣。有一个规范的规范会很酷,你知道我的意思吗?模型规范应该(按优先级和相关性顺序):测试所有方法?测试错误数组?测试CRUD(以及如何)?还有什么?Controller/View规范应该(按优先级/相关性顺序):填空...?扩展规范应该包含和不应该包含的内容的列表会很棒。我还想编制一份技巧和建议列表。例如:关键字“应该”有点多余。示例:这个:it"shouldbeinvalidwithoutafirstname"会更好:it"isinvalidwithoutafirs

  8. ruby-on-rails - 使用 .include 检查数组中的多个项目? -- ruby 初学者 - 2

    有没有更好的写法:ifmyarray.include?'val1'||myarray.include?'val2'||myarray.include?'val3'||myarray.include?'val4' 最佳答案 使用集合交集(Array#:&):(myarray&["val1","val2","val3","val4"]).present?你也可以循环(any?会在第一次出现时停止):myarray.any?{|x|["val1","val2","val3","val4"].include?(x)}这对于小数组来说没问题,

  9. javascript - 初学者 Javascript 数组和计数器 - 2

    我是新手,真的不知道如何表达这个问题,所以请多多包涵。我想在javascript中使用数组保存数据集,并使用计数器按顺序访问它们。例如,我想显示关于一个人的每条数据,一次显示一个人。现在我正在使用类似这样的东西:varfirstNames=newArray("John","Bob","Anna","Natalie");varlastNames=newArray("Smith","Price","Johnson","Baker");varages=newArray(34,51,12,83);然后访问它们:counter++;firstNames[counter];lastNames[co

  10. javascript - jQuery - 一些初学者问题 - 2

    我是jQuery的初学者,我有一些基本问题:只要有可能通过使用jQuery来替换某些东西,是否建议使用jQuery?例如,使用它而不是通过HTML将所有事件绑定(bind)到元素是否明智?我自己托管jQuery.js文件和所有其他相关文件(如JQueryUI)更好,还是使用Google的链接(他们似乎也为其他人托管)可能是更好的选择?在页面加载完成后执行脚本时,首选哪种方式?$(document).ready(function(){})$(function(){})$().ready(function(){})他们似乎都做同样的事情,但首选的脚本编写方式是什么?

随机推荐