今天没事的时候看了看自己以前学习Android的视频,第一眼看到视频感觉标题很简单,但是不去百度不看博客查阅相关知识,感觉有点忘记了好多基础的东西,正所谓是基础不牢,地动山摇”。

今天我要说一个小的事情,也是今天的博客的主题---触屏事件

大家都玩手机的时候点击屏幕,点击屏幕的事件就是触屏事件,点击屏幕就会响应相应的动作和功能的实现。下面我们一起学习一下---触屏事件。

一、首先介绍一下触屏事件的相关知识

1.触屏事件应用到的重写OnTouchEvent()方法,用于自身调用,并在该方法中实现相应的动作。

2.触屏事件中的 getAction()得到触屏的动作类型,然后与MotionEvent中的动作类型进行比对。

3.MotionEvent的最主要的两个动作:ACTION_DOWN和ACTION_UP两个动作。

4.触屏事件获得相应的位置。event.getX()和event.getY()两个方法,注意得到的是float数据类型,还有得到的数据是以像素为单位的。

5.类似游戏中拖拽着飞机移动的效果实现,用到了触屏事件。

二、触屏事件相关博客的知识整理

1.android系统中的每个View的子类都具有下面三个和TouchEvent处理密切相关的方法:
  1)public boolean dispatchTouchEvent(MotionEvent ev)  这个方法用来分发TouchEvent
  2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent
  3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent

2.

三、当发生触屏事件系统的响应

当TouchEvent发生时,首先Activity将TouchEvent传递给最顶层的View, TouchEvent最先到达最顶层 view 的 dispatchTouchEvent ,然后由  dispatchTouchEvent 方法进行分发,如果dispatchTouchEvent返回true ,则交给这个view的onTouchEvent处理,如果dispatchTouchEvent返回 false ,则交给这个 view 的 interceptTouchEvent 方法来决定是否要拦截这个事件,如果 interceptTouchEvent 返回 true ,也就是拦截掉了,则交给它的 onTouchEvent 来处理,如果 interceptTouchEvent 返回 false ,那么就传递给子 view ,由子 view 的 dispatchTouchEvent 再来开始这个事件的分发。如果事件传递到某一层的子 view 的 onTouchEvent 上了,这个方法返回了 false ,那么这个事件会从这个 view 往上传递,都是 onTouchEvent 来接收。而如果传递到最上面的 onTouchEvent 也返回 false 的话,这个事件就会“消失”,而且接收不到下一次事件.

四、对于移动的触屏事件我写了个代码。

1.首先我自定义了个MyView继承View。

代码中用到自定义View的知识,大家如果忘记的话可以看看大神的博客

自定义View(一) http://blog.csdn.net/lmj623565791/article/details/24252901

自定义View(二)进阶 http://blog.csdn.net/lmj623565791/article/details/24300125

自定义View (三) 圆环交替 等待效果 http://blog.csdn.net/lmj623565791/article/details/24500107

很不错的博客,大家可以学一学。

  下面我就继续讲解我的代码,在代码中将onDraw()方法重写,然后进行简单的代码实现:

import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.util.AttributeSet;import android.view.View;import com.zes.base.mydalytext.R;public class MyView extends View {    private Bitmap bitmap = null;    public int xx;    public int yy ;    public void setXx(int xx) {        this.xx = xx;    }    public void setYy(int yy) {        this.yy = yy;    }    public MyView(Context context, AttributeSet attrs) {        super(context, attrs);        bitmap= BitmapFactory.decodeResource(getResources(), R.drawable.map_pin);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        canvas.drawBitmap(bitmap,xx-bitmap.getWidth()/2,yy-bitmap.getHeight()/2,null);    }}


2.自定义了View之后添加到Activity的xml中去。代码如下:


<?xml version="1.0" encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.zes.base.mydalytext.MainActivity">            android:id="@+id/myview"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentTop="true"        />


3.下面是主代码的实现:


import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.MotionEvent;import android.view.Window;import android.view.WindowManager;import android.widget.Toast;import com.zes.base.mydalytext.view.MyView;public class MainActivity extends Activity {    private MyView myview;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);        setContentView(R.layout.activity_main);        myview=(MyView) findViewById(R.id.myview);    }    @Override    public boolean onTouchEvent(MotionEvent event) {        myview.setXx((int)event.getX());        myview.setYy((int)event.getY());        Log.i("TEXT","x---------"+event.getX()+"-------y-------"+event.getY());        myview.invalidate();        return super.onTouchEvent(event);    }

实现后就可以点击屏幕上的图片控件进行移动。很简单的操作,但是让人想起很多小知识点。并可以从中学到大神的博客知识。谢谢大家!



更多相关文章

  1. android显示RGB565数据图像
  2. Android-几行代码通知系统自动安装apk
  3. Android上对非标准RSS进行解析之后的反思
  4. Android(安卓)ProgressBar详解以及自定义
  5. 实现Android监控任意控件或按键双击事件方法
  6. Android(安卓)Studio编译C++代码——Release与Debug版本的记录
  7. Android工程中R类访问不到工程中的资源文件的解决方法
  8. 我的安卓应用——SchoolSystem的代码展示
  9. Android(安卓)不得不说的VideoView的一些坑及其解决方案

随机推荐

  1. Android中的Handler总结
  2. 我的Java之路--Android转Java后台
  3. Android的视频通话的Java代码
  4. Android中实现全屏、无标题栏的两种办法(
  5. Android智能指针SP WP使用方法介绍
  6. android 修改AVD的存放位置
  7. Android视频开发浅析
  8. Android之初步---摘录
  9. Android(安卓)播放Gif 动画
  10. [Android]Android(安卓)如何绘制图表