跟随手指移动的小球

通过回调实现跟随手指移动的小球:

那么什么是回调,这里的回调是指Android中两种事件处理的方式之一。一种是通过监听器来实现的监听机制,一种是通过自身的方法实现的回调机制。

基于监听的处理机制,主要涉及三类对象:

EventSource(事件源):通常是各个组件;

Event(事件):对组件的操作;

EventListener(事件监听器):做出响应。

所谓事件监听器其实就是实现了特定接口的Java类的实例。

在程序中实现事件监听器,有四种形式:

1.内部类形式

2.外部类形式

3.Activity本身作为事件监听器

4.匿名内部类

一般来说,后两种较常用。

基于回调的监听机制:

事件源与事件监听器是统一的,或者说事件监听器消失了。

基于回调的事件处理可通过自定义View来实现。

两者有什么不同?

事件监听机制是一种委托式的事件处理,,事件源与事件监听器不是统一的,或者说是分开的,不是一起的。

而基于回调的事件事件处理机制,事件源与事件监听器是一起的,不用通过监听器,自己就能实现。

基于回调的事件传播:

几乎所有的基于回调的事件处理方法都有一个boolean类型的返回值,该值用于标识该处理方法是否能完全处理该事件。

返回true,表明该处理方法已完全处理该事件,该事件不会传播出去

返回false,表明该处理方法没有完全处理该事件,该事件会传播出去。

对于基于回调的事件传播而言,某组件上所发生的事情不仅激发该组件上的回调方法,也会触发该组件所在Activity的回调方法—-只要事件能传播到该Activity。

实例:

跟随手指移动的小球:自定义VIew

MainActivity.java:

package com.example.ontoucheventdemo;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}}

DrawViewDemo.java:

package com.example.ontoucheventdemo;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;public class DrawViewDemo extends View{public float currentX = 40;public float currentY = 50;//定义。创建画笔Paint p = new Paint();public DrawViewDemo(Context context,AttributeSet set) {// TODO Auto-generated constructor stubsuper(context,set);}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.onDraw(canvas);//设置画笔的颜色p.setColor(Color.RED);//绘制一个小球//参数分别是:圆心坐标,半径 ,所使用的画笔canvas.drawCircle(currentX, currentY, 15, p);}@Overridepublic boolean onTouchEvent(MotionEvent event) {// TODO Auto-generated method stub//修改当前的坐标this.currentX = event.getX();this.currentY = event.getY();//重绘小球this.invalidate();return true;}}

activity_main.xml:

<LinearLayout xmlns:android=""xmlns:tools=""android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"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.example.ontoucheventdemo.MainActivity" ><com.example.ontoucheventdemo.DrawViewDemoandroid:layout_width="fill_parent"android:layout_height="fill_parent"/></LinearLayout>

生活中若没有朋友,就像生活中没有阳光一样

跟随手指移动的小球

相关文章:

你感兴趣的文章:

标签云: