android 实现自定义监听接口,Android编程自定义View时添加自己的监听器示例

本文实例讲述了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中的定义

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

android:id="@+id/my_view"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@drawable/area_point_bg" />

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);

}

});

}

}

打印消息

2fead890dcc60204324a080845af939f.png

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值