Android编程自定义View时添加自己的 * 示例
作者:dztai 时间:2023-08-20 11:58:27
本文实例讲述了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程序设计有所帮助。
来源:http://blog.csdn.net/deng0zhaotai/article/details/21456791
标签:Android,自定义View, ,
0
投稿
猜你喜欢
详解C#对路径...的访问被拒绝解决过程
2021-06-01 11:12:10
详解Java8新特性Stream之list转map及问题解决
2021-06-12 05:45:06
基于C#实现的屏幕指定区域截屏代码
2021-12-31 19:42:09
详解基于Spring Cloud几行配置完成单点登录开发
2023-07-06 19:14:11
java直接插入排序示例
2021-09-27 15:53:35
C#方法中参数ref和out详解
2021-07-19 12:59:32
Android 中Banner的使用详解
2023-08-18 08:57:02
springdata jpa使用Example快速实现动态查询功能
2022-12-01 21:49:08
SpringBoot如何动态修改Scheduled(系统启动默认执行,动态修改)
2023-11-29 06:13:27
flutter实现发送验证码功能
2023-07-05 19:03:12
Android可筛选的弹窗控件CustomFiltControl
2023-01-21 09:01:46
Hadoop源码分析六启动文件namenode原理详解
2021-08-20 01:03:55
maven创建spark项目的pom.xml文件配置demo
2023-11-02 01:14:02
c# mutex互斥量的深入解析
2022-03-13 02:38:42
java实现面板之间切换功能
2021-12-03 15:06:39
常见的java面试题
2023-11-26 18:03:44
在C#使用字典存储事件示例及实现自定义事件访问器
2022-08-14 14:34:52
Java 精炼解读数据结构的链表的概念与实现
2022-03-02 05:17:11
java 非对称加密算法RSA实现详解
2023-11-25 07:41:36
Android消息机制Handler用法总结
2022-08-10 23:58:56