首页 > 系统 > Android > 正文

Android编程自定义View时添加自己的监听器示例

2019-10-22 18:16:50
字体:
来源:转载
供稿:网友

本文实例讲述了Android编程自定义View时添加自己的监听器。分享给大家供大家参考,具体如下:

监听器在Java中非常常用,在自定义控件时可能根据自己的需要去监听一些数据的改变,这时就需要我们自己去写监听器,Java中的监听器实际上就是C++中的回调函数,在初始化时设置了这个函数,由某个事件触发这个函数被调用,两个类之间的数据通信也可以通过监听器来实现。要定义监听器就要先定义一个接口,具体功能由设置监听器的类去实现

关键代码实现

package com.example.listviewitem.widgets;import android.content.Context;import android.graphics.Canvas;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;/** * 在自定义的View中定义三个监听器 */public class MyView extends View {  private OnDownActionListener mDown = null;  private OnMoveActionListener mMove = null;  private OnUpActionListener mUp = null;  public MyView(Context context) {    super(context);  }  public MyView(Context context, AttributeSet attrs) {    super(context, attrs);    // TODO Auto-generated constructor stub  }  @Override  protected void onDraw(Canvas canvas) {    // TODO Auto-generated method stub    super.onDraw(canvas);  }  @Override  public boolean onTouchEvent(MotionEvent event) {    // TODO Auto-generated method stub    int x, y;    if (event.getAction() == MotionEvent.ACTION_DOWN) {      x = (int) event.getX();      y = (int) event.getY();      if (mDown != null) {        mDown.OnDown(x, y);      }      return true; // 只有返回true这个控件的move和up才会响应    } else if (event.getAction() == MotionEvent.ACTION_MOVE) {      x = (int) event.getX();      y = (int) event.getY();      if (mMove != null) {        mMove.OnMove(x, y);      }    } else if (event.getAction() == MotionEvent.ACTION_UP) {      x = (int) event.getX();      y = (int) event.getY();      if (mUp != null) {        mUp.OnUp(x, y);      }    }    return super.onTouchEvent(event);  }  // 为每个接口设置监听器  public void setOnDownActionListener(OnDownActionListener down) {    mDown = down;  }  public void setOnMoveActionListener(OnMoveActionListener move) {    mMove = move;  }  public void setOnUpActionListener(OnUpActionListener up) {    mUp = up;  }  // 定义三个接口  public interface OnDownActionListener {    public void OnDown(int x, int y);  }  public interface OnMoveActionListener {    public void OnMove(int x, int y);  }  public interface OnUpActionListener {    public void OnUp(int x, int y);  }}

自定义View在xml中的定义

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical" >  <com.example.listviewitem.widgets.MyView    android:id="@+id/my_view"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:background="@drawable/area_point_bg" /></LinearLayout>

Activity中设置监听器

package com.example.listviewitem;import com.example.listviewitem.widgets.MyView;import com.example.listviewitem.widgets.MyView.OnDownActionListener;import com.example.listviewitem.widgets.MyView.OnMoveActionListener;import com.example.listviewitem.widgets.MyView.OnUpActionListener;import android.app.Activity;import android.os.Bundle;public class TestListener extends Activity {  private MyView view;  @Override  protected void onCreate(Bundle savedInstanceState) {    // TODO Auto-generated method stub    super.onCreate(savedInstanceState);    setContentView(R.layout.listener);    view = (MyView) findViewById(R.id.my_view);    view.setOnDownActionListener(new OnDownActionListener() {      @Override      public void OnDown(int x, int y) {        // TODO Auto-generated method stub        System.out.println("down x = " + x + " y = " + y);      }    });    view.setOnMoveActionListener(new OnMoveActionListener() {      @Override      public void OnMove(int x, int y) {        // TODO Auto-generated method stub        System.out.println("move x = " + x + " y = " + y);      }    });    view.setOnUpActionListener(new OnUpActionListener() {      @Override      public void OnUp(int x, int y) {        // TODO Auto-generated method stub        System.out.println("up x = " + x + " y = " + y);      }    });  }}

打印消息

Android,自定义View,监听器

说明我们自定义的监听器已经起作用了。

希望本文所述对大家Android程序设计有所帮助。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表