Android 自定义控件开发入门(二)

简介:

上一次我们讲了一堆实现自定义控件的理论基础,列举了View类一些可以重写的方法,我们对这些方法的重写是我们继承View类来派生自定义控件的关键


我通过一个最简单的例子给大家展示了这一个过程,无论是多么复杂的自定义控件,思路总是这样子的,但是因为我们仅仅重写了onDraw方法使得大家觉得怪怪的,作为一个控件,我们居然还要为了他的实现为其增加麻烦的监听,这就不能叫做控件了。

下面再给大家介绍一个经常重写的方法法:publicboolean onTouchEvent (MotionEvent event)


通过这个方法,我们就把写在Activity的监听部分内置在控件内部了,这才能叫做一个完整的控件,其功能是建立一片区域,并其中包含一个可以根据手指触摸而改变位置的小球。

下面我们来看一下这个触摸事件方法:

 publicboolean onTouchEvent (MotionEvent event)


Added in API level 1


Implement this method to handle touch screen motionevents.

If this method is used to detect click actions, it isrecommended that the actions be performed by implementing and calling performClick(). This willensure consistent system behavior, including:

obeying click sound preferences

dispatching OnClickListener calls

handling ACTION_CLICK whenaccessibility features are enabled


Parameters

event

The motion event.


Returns

True if the event was handled, false otherwise.

 

这样我们就可以把我们刚才在Activity的类中做的工作放到我们的自定义控件中来实现

只要去掉刚才的setter 和 getter 然后重写这个触摸事件的方法就可以了:


public boolean onTouchEvent(MotionEvent motionevent){
		
		CircleX  = motionevent.getX();
		CircleY  = motionevent.getY();
		this.invalidate();
		
		return true;

这样我们只需要再简单的在xml中调用,一切都愉快的解决了!

这个例子我会和第一个一并放在一起的,就和我之前写的适配器的教程一样,源码我会整理再一起再给大家。第二个程序我注释就不那么注意啦……不是我懒,最近比较忙(其实就是懒)


下面我贴一下代码:


Activity的代码:


package com.example.customcomponentsdemo.Activity;

import com.example.customcomponentsdemo.R;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;

public class MoveBallActivity2 extends Activity{
	
	@Override
	protected void onCreate(Bundle savedInstanceState){
		
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_moveball2);
	}

}


简介了好多有木有!


自定义View版本2的代码:

package com.example.customcomponentsdemo.component;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class DrawView2 extends View{

	private Context context;
	
	private float CircleX = 100;
	private float CircleY = 100;
	private float CircleR = 10;
	
	public DrawView2(Context context, AttributeSet attrs) {
		super(context, attrs);
		this.context = context;
	}

	@Override
	public void onDraw(Canvas canves){
		Paint paint = new Paint();
		
		paint.setColor(Color.BLUE);
		canves.drawCircle(CircleX, CircleY, CircleR, paint);
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent motionevent){
		
		CircleX  = motionevent.getX();
		CircleY  = motionevent.getY();
		this.invalidate();
		
		return true;
		
	}


}

这样就简洁了好多!


还有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" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="这是MoveBall的Demo 版本2"
        android:textColor="@color/white" >
    </TextView>

    <com.example.customcomponentsdemo.component.DrawView2
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp" >
    </com.example.customcomponentsdemo.component.DrawView2>
    
    

</LinearLayout>


 这样我们的第二个教程也就先到这里了,这次的主题不是这个ontouch方法,而是要告诉大家,自定义控件的核心是重写这些方法,并添加所需要的逻辑,View的方法不多也不少,我就用这个例子给大家抛砖引玉一下,希望大家在自定义自己的控件并选择了继承View这条路时,要花时间去了解和理解这些方法的重写方法,这是十分重要的。 下次再给大家介绍一下如果自定义的View需要有自定义的属性我们该如何处理,下一讲也将会是这个系列完结篇了,因为自定义View之路还有很远,我也没有举一些很难的例子,我认为基础知识只有这些,学习了这些之后自定义控件的基础也就讲完了,剩下的是大家在基础之上发挥了!之后如果有比较好的例子我还会继续补充的。


源码我会在下次一并发给大家链接的,希望大家能学到一些东西~


另外我也是学生,如果有写的不好或者有错误的地方还请大家多多指教,谢谢!

目录
相关文章
|
2月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
283 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
232 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
572 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
517 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
2月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
143 0
|
3月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
214 6
|
5月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
371 11
|
5月前
|
移动开发 Java 编译器
Kotlin与Jetpack Compose:Android开发生态的演进与架构思考
本文从资深Android工程师视角深入分析Kotlin与Jetpack Compose在Android系统中的技术定位。Kotlin通过空安全、协程等特性解决了Java在移动开发中的痛点,成为Android官方首选语言。Jetpack Compose则引入声明式UI范式,通过重组机制实现高效UI更新。两者结合不仅提升开发效率,更为跨平台战略和现代架构模式提供技术基础,代表了Android开发生态的根本性演进。
194 0
|
9月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
2133 77
|
6月前
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
278 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡

热门文章

最新文章