国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android編程自定義View時(shí)添加自己的監(jiān)聽器示例

2019-12-12 01:16:46
字體:
供稿:網(wǎng)友

本文實(shí)例講述了Android編程自定義View時(shí)添加自己的監(jiān)聽器。分享給大家供大家參考,具體如下:

監(jiān)聽器在Java中非常常用,在自定義控件時(shí)可能根據(jù)自己的需要去監(jiān)聽一些數(shù)據(jù)的改變,這時(shí)就需要我們自己去寫監(jiān)聽器,Java中的監(jiān)聽器實(shí)際上就是C++中的回調(diào)函數(shù),在初始化時(shí)設(shè)置了這個函數(shù),由某個事件觸發(fā)這個函數(shù)被調(diào)用,兩個類之間的數(shù)據(jù)通信也可以通過監(jiān)聽器來實(shí)現(xiàn)。要定義監(jiān)聽器就要先定義一個接口,具體功能由設(shè)置監(jiān)聽器的類去實(shí)現(xiàn)

關(guān)鍵代碼實(shí)現(xiàn)

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中定義三個監(jiān)聽器 */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才會響應(yīng)    } 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);  }  // 為每個接口設(shè)置監(jiān)聽器  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中設(shè)置監(jiān)聽器

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

打印消息

說明我們自定義的監(jiān)聽器已經(jīng)起作用了。

更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android控件用法總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android視圖View技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android數(shù)據(jù)庫操作技巧總結(jié)》及《Android資源操作技巧匯總

希望本文所述對大家Android程序設(shè)計(jì)有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 资中县| 崇信县| 临泉县| 商南县| 合川市| 遂川县| 株洲市| 五峰| 光泽县| 公安县| 博白县| 华安县| 乌拉特中旗| 奉化市| 奇台县| 龙口市| 井陉县| 寿宁县| 西林县| 龙门县| 娱乐| 夏津县| 杭州市| 金湖县| 池州市| 隆子县| 来宾市| 宁都县| 安福县| 棋牌| 宁陵县| 无极县| 分宜县| 临潭县| 洮南市| 湘阴县| 旬阳县| 玉屏| 香港| 峨眉山市| 万盛区|