您的位置:首页 > 移动开发 > Android开发

Android自定义View时添加自己的监听器

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

关键代码实现

[java] view
plaincopy





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中的定义

[html] view
plaincopy





<?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中设置监听器

[java] view
plaincopy





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

}

});

}

}

打印消息



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

原帖地址:
http://blog.csdn.net/deng0zhaotai/article/details/21456791?utm_source=tuicool
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: