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

<?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相关内容感兴趣的读者可查看本站专题:《Android控件用法总结》、《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android数据库操作技巧总结》及《Android资源操作技巧汇总》

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

(0)

相关推荐

  • android监听器实例代码

    代码分享: import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { @Override protected void onC

  • Android编程之监听器的实现方法

    本文实例讲述了Android编程之监听器的实现方法.分享给大家供大家参考,具体如下: 1.通过内部类实现监听器,将事件监听器定义成当前的内部类,使用内部类可以在当前类中复用监听器. 第一步: 写监听器类,覆盖对应的抽象方法 第二步:创建监听器对象 第三步:注册 以一个button为例,代码如下: package cn.csdn.android.tesxt; import android.app.Activity; import android.content.DialogInterface; i

  • Android实现静态广播监听器的方法

    本文实例讲述了Android实现静态广播监听器的方法.分享给大家供大家参考.具体实现方法如下: package lab.sodino.broadcastaction; import lab.sodino.util.DatabaseOpenHelper; import lab.sodino.util.SodinoOut; import android.app.Activity; import android.content.ContentResolver; import android.datab

  • Android中ScrollView实现滑动距离监听器的方法

    前言 众所周知ScrollView是我们经常使用的一个UI控件,也许你在使用ScrollView的过程中会发现,当你想监听ScrollView滑动的距离时却没有合适的监听器!当然在API 23中有setOnScrollChangeListener(View.OnScrollChangeListener l)可以使用,但是并不兼容低版本的API.那怎么办呢?只好重写ScrollView来实现对滑动距离的监听了. 话不多说,直接上代码: public class MyScrollView exten

  • Android控件系列之Button以及Android监听器使用介绍

    学习目的: 1.掌握在Android中如何建立Button 2.掌握Button的常用属性 3.掌握Button按钮的点击事件(监听器) Button是各种UI中最常用的控件之一,它同样也是Android开发中最受欢迎的控件之一,用户可以通过触摸它来触发一系列事件,要知道一个没有点击事件的Button是没有任何意义的,因为使用者的固定思维是见到它就想去点! 先看下Android中普通Button的样子: 以及点中Button后的样子: 我在Android控件系列之XML静态资源中已经强调了布局和

  • android Animation监听器AnimationListener的使用方法)

    AnimationListener听名字就知道是对Animation设置监听器,说简单点就是在Animation动画效果开始执行前,执行完毕和重复执行时可以触发监听器,从而执行对应的函数. 开发环境为android4.1.AnimaitonListener的使用方法主要是在Animation上设置一个监听器,即采用Animation的方法成员setAnimationListener().其参数就是监听器的函数.现在来说说本次实验的功能,主要有2个按钮,一个是增加图片的按钮,一个是删除图片的按钮,

  • Android实现检测手机摇晃的监听器

    android 检测手机摇晃的监听器,实现代码如下所示: public class ShakeListener implements SensorEventListener { // 速度阈值,当摇晃速度达到这值后产生作用 private static final int SPEED_SHRESHOLD = 3000; // 两次检测的时间间隔 private static final int UPTATE_INTERVAL_TIME = 70; // 传感器管理器 private Sensor

  • Android编程之监听器用法实例分析

    本文实例讲述了Android编程之监听器用法.分享给大家供大家参考,具体如下: 这里通过监听内容提供者数据变化和监听发送短信进行讲解监听器.如果用户提供者数据发生了变化,监听器立刻就能收到对数据库操作的记录,而监听器是采用通知的机制,如果不采用通知的机制也可以做,那就是不断的查询数据库,这样的话效率就会很低.而采用通知机制的话,当用户向数据库发送一条记录,ContentObserver立刻就能获取到,我们就可以进行处理数据. 监听内容提供者数据的变化 1.在内容提供者中可以通知其他程序数据发生变

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

    本文实例讲述了Android编程自定义View时添加自己的监听器.分享给大家供大家参考,具体如下: 监听器在Java中非常常用,在自定义控件时可能根据自己的需要去监听一些数据的改变,这时就需要我们自己去写监听器,Java中的监听器实际上就是C++中的回调函数,在初始化时设置了这个函数,由某个事件触发这个函数被调用,两个类之间的数据通信也可以通过监听器来实现.要定义监听器就要先定义一个接口,具体功能由设置监听器的类去实现 关键代码实现 package com.example.listviewite

  • Android 自定义View时使用TypedArray配置样式属性详细介绍

     Android 自定义View时使用TypedArray配置样式属性详细介绍 在自定义view时为了提高复用性和扩展性,可以为自定义的view添加样式属性的配置,比如自定义图片资源.文字大小.控件属性等,就这需要用到TypedArray类,下面以一个自定义的可点击扩展和收缩的TextView为例记录下这个类的简单使用. 先上效果图: 点击以后为 再贴代码: 1.自定义view类: /** * @title ExpandTextView * @description 可扩展TextView,可以

  • Android编程自定义Notification实例分析

    本文实例讲述了Android编程自定义Notification的用法.分享给大家供大家参考,具体如下: Notification是一种让你的应用程序在不使用Activity的情况下警示用户,Notification是看不见的程序组件警示用户有需要注意的事件发生的最好途径. 作为UI部分,Notification对移动设备来说是最适合不过的了.用户可能随时都带着手机在身边.一般来说,用户会在后台打开几个程序,但不会注意它们.在这样的情形下,当发生需要注意的事件时,能够通知用户是很重要的. Noti

  • Android编程自定义圆角半透明Dialog的方法

    本文实例讲述了Android编程自定义圆角半透明Dialog的方法.分享给大家供大家参考,具体如下: 效果图如下: 只是在实例化的时候使用带样式的构造函数即可 new MyDialog(GameActivity.this, R.style.dialog); 在value文件夹中添加mydialogthemes.xml <?xml version="1.0″ encoding=" utf-8″?> <resources> <style name="

  • Android编程实现音量按钮添加监听事件的方法

    本文实例讲述了Android编程实现音量按钮添加监听事件的方法.分享给大家供大家参考,具体如下: 很多Android应用都应用到音量按钮,比如翻页,调整音乐声音大小等,但是如果没有对音量按钮进行监听,则无法达到预期的效果.如下代码,就是监听Android手机的音量按钮,开发者可以在相应的位置添加自己需要实现的功能. @Override public boolean onKeyDown (int keyCode, KeyEvent event) { // 获取手机当前音量值 int i = get

  • Android编程自定义组件实例详解

    本文实例讲述了Android编程自定义组件.分享给大家供大家参考,具体如下: 在Android中,所有的UI界面都是由View类和ViewGroup类及其子类组合而成.其中,View类是所有UI组件的基类,而ViewGroup类是容纳这些UI组件的容器. 其本身也是View类的子类. 在实际开发中,View类还不足以满足程序所有的需求.这时,便可以通过继承View类来开发自己的组件. 开发自定义组件的步骤: 1.创建一个继承android.view.View类的View类,并且重写构造方法. 2

  • Android编程自定义对话框(Dialog)位置及大小的方法

    本文实例讲述了Android编程自定义对话框(Dialog)位置及大小的方法.分享给大家供大家参考,具体如下: 代码: package angel.devil; import android.app.Activity; import android.app.Dialog; import android.os.Bundle; import android.view.Gravity; import android.view.Window; import android.view.WindowMana

  • Android编程实现下载时主界面与详细界面一致更新的方法

    本文实例讲述了Android编程实现下载时主界面与详细界面一致更新的方法.分享给大家供大家参考,具体如下: 1.创建监听管理类 public class ObserverManager { private List<Observer> observers = new ArrayList<ObserverManager.Observer>(); public interface Observer { public void update(); public void updateSt

  • Android编程自定义线程池与用法示例

    本文实例讲述了Android编程自定义线程池与用法.分享给大家供大家参考,具体如下: 一.概述: 1.因为线程池是固定不变的,所以使用了单例模式 2.定义了两个线程池,长的与短的,分别用于不同的地方.因为使用了单例模式,所以定义两个. 3.定义了两个方法,执行的与取消的 二.代码: /** * @描述 线程管理池 * @项目名称 App_Shop * @包名 com.android.shop.manager * @类名 ThreadManager * @author chenlin * @dat

  • Android编程自定义AlertDialog样式的方法详解

    本文实例讲述了Android编程自定义AlertDialog样式的方法.分享给大家供大家参考,具体如下: 开发的时候,通常我们要自定义AlertDialog来满足我们的功能需求: 比如弹出对话框中可以输入信息,或者要展示且有选择功能的列表,或者要实现特定的UI风格等.那么我们可以通过以下方式来实现. 方法一:完全自定义AlertDialog的layout.如我们要实现有输入框的AlertDialog布局custom_dialog.xml: <?xml version="1.0"

随机推荐