本文实例讲述了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;
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中的定义
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相关内容感兴趣的读者可查看本站专题:《Android控件用法总结》、《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android数据库操作技巧总结》及《Android资源操作技巧汇总》
希望本文所述对大家Android程序设计有所帮助。



