android View的一些学习记录

简介:

1,View是所有控件的父类

2,View可以关联很多个listenner。就像一个女孩有很多个男人对她好一样。有为她卖苦力的穷叼丝,也有她拿得出手的高副帅。当女孩发生需要搬宿舍的事件的时候,这个时候穷叼丝监听到了该事件的发生,于是帮搬宿舍,当她需要去看电影和开房的时候,高副帅男友监听到了该事件,于是就跟她完成了一个很美好的夜晚。


View 的事件监听,举个例子


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

然后在layout的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">
 
</com.example.listviewitem.widgets.myview></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);
            }
        });
    }
}


这样就完成了一个自定义控件的时间监听。














相关文章
|
30天前
|
数据可视化 Android开发 开发者
安卓应用开发中的自定义View组件
【10月更文挑战第5天】在安卓应用开发中,自定义View组件是提升用户交互体验的利器。本篇将深入探讨如何从零开始创建自定义View,包括设计理念、实现步骤以及性能优化技巧,帮助开发者打造流畅且富有创意的用户界面。
61 0
|
6天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
19 5
|
14天前
|
缓存 数据处理 Android开发
在 Android 中使用 RxJava 更新 View
【10月更文挑战第20天】使用 RxJava 来更新 View 可以提供更优雅、更高效的解决方案。通过合理地运用操作符和订阅机制,我们能够轻松地处理异步数据并在主线程中进行 View 的更新。在实际应用中,需要根据具体情况进行灵活运用,并注意相关的注意事项和性能优化,以确保应用的稳定性和流畅性。可以通过不断的实践和探索,进一步掌握在 Android 中使用 RxJava 更新 View 的技巧和方法,为开发高质量的 Android 应用提供有力支持。
|
14天前
|
缓存 调度 Android开发
Android 在子线程更新 View
【10月更文挑战第21天】在 Android 开发中,虽然不能直接在子线程更新 View,但通过使用 Handler、AsyncTask 或 RxJava 等方法,可以实现子线程操作并在主线程更新 View 的目的。在实际应用中,需要根据具体情况选择合适的方法,并注意相关的注意事项和性能优化,以确保应用的稳定性和流畅性。可以通过不断的实践和探索,进一步掌握在子线程更新 View 的技巧和方法,为开发高质量的 Android 应用提供支持。
21 2
|
15天前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
|
18天前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
19 2
|
2月前
|
Java Maven 开发工具
第一个安卓项目 | 中国象棋demo学习
本文是作者关于其第一个安卓项目——中国象棋demo的学习记录,展示了demo的运行结果、爬坑记录以及参考资料,包括解决Android Studio和maven相关问题的方法。
第一个安卓项目 | 中国象棋demo学习
|
1月前
|
XML 前端开发 Android开发
Android View的绘制流程和原理详细解说
Android View的绘制流程和原理详细解说
33 3
|
30天前
|
XML 前端开发 Java
安卓应用开发中的自定义View组件
【10月更文挑战第5天】自定义View是安卓应用开发的一块基石,它为开发者提供了无限的可能。通过掌握其原理和实现方法,可以创造出既美观又实用的用户界面。本文将引导你了解自定义View的创建过程,包括绘制技巧、事件处理以及性能优化等关键步骤。
|
28天前
|
Web App开发 编解码 视频直播
视频直播技术干货(十二):从入门到放弃,快速学习Android端直播技术
本文详细介绍了Android端直播技术的全貌,涵盖了从实时音视频采集、编码、传输到解码与播放的各个环节。文章还探讨了直播中音视频同步、编解码器选择、传输协议以及直播延迟优化等关键问题。希望本文能为你提供有关Andriod端直播技术的深入理解和实践指导。
39 0