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之路还有很远,我也没有举一些很难的例子,我认为基础知识只有这些,学习了这些之后自定义控件的基础也就讲完了,剩下的是大家在基础之上发挥了!之后如果有比较好的例子我还会继续补充的。

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

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

时间: 2024-10-01 06:53:42

Android 自定义控件开发入门(二)的相关文章

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

作为一个有创意的开发者,或者软件对UI设计的要求比较高,你经常会遇到安卓自带的控件无法满足你的需求的情况,这种时候,我们只能去自己去实现适合项目的控件.同时,安卓也允许你去继承已经存在的控件或者实现你自己的控件以便优化界面和创造更加丰富的用户体验.   那么怎样来创建一个新的控件呢?  这得看需求是怎样的了. 1.需要在原生控件的基本功能上进行扩展,这个时候你只需要继承并对控件进行扩展.通过重写它的事件,onDraw ,但是始终都保持都父类方法的调用.如从已有的高级控件上继承,例如继承一个Tex

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

上两次我们从如何自定义控件讲起,列举了View的一些Api,说明了一些在自定义的时候,可以进行重写的方法,然后通过一个例子的两种写法向大家展示了最基本的自定义控件和我们要充分了解并积极重写View方法的精神,这次我们将继续进行学习!  现在请大家回想一下我们使用安卓原生控件时的感受,一个好的控件是可以在xml中进行各种属性的操作的,而自定义控件往往有一些特殊的需求,今天我要讲的就是安卓给自定义控件添加自定义的属性. 下面再给大家具体介绍一下如果自定义的View需要有自定义的属性我们该如何处理:

一看就懂的Android APP开发入门教程

  这篇文章主要介绍了Android APP开发入门教程,从SDK下载.开发环境搭建.代码编写.APP打包等步骤一一讲解,非常简明的一个Android APP开发入门教程,需要的朋友可以参考下 工作中有做过手机App项目,前端和android或ios程序员配合完成整个项目的开发,开发过程中与ios程序配合基本没什么问题,而android各种机子和rom的问题很多,这也让我产生了学习android和ios程序开发的兴趣.于是凌晨一点睡不着写了第一个android程序HelloAndroid,po出

Kinect for Windows SDK开发入门(二)基础知识 上

上篇文章介绍了Kinect开发的环境配置,这篇文章和下一篇文章将介绍Kinect开发的基本知识,为深入研究Kinect for Windows SDK做好基础. 每一个Kinect应用都有一些基本元素.应用程序必须探测和发现链接到设备上的Kinect传感器.在使用这些传感器之前,必须进行初始化,一旦初始化成功后,就能产生数据,我们的程序就能处理这些数据.最后当应用程序关闭是,必须合理的释放这些传感器. 本文第一部分将会介绍如何探测初始化几释放传感器,这是非常基础的话题,但是对于基于Kinect开

Windows 8风格应用开发入门 二十九 捕获图片与视频

一.相机 关于相机 1.相机对话框提供了触屏优化的全屏体验,你可从嵌入的或附加 的相机中捕获照片和视频. 2.全屏对话框处理显示相机 UI 的工作. 3.通过此对话框, 你可以使用对 Windows.Media.Capture.CameraCaptureUI.captureFileAsyncAPI 的一种方法调用捕获 照片或视频. 4.作为捕获体验的一部分,用户可对其捕获的照片进行修剪,对捕获的视频进行 剪辑,然后再将它们返回至调用应用程序. 5.用户在捕获照片或视频前,还可调整一些相机设 置,

Windows 8风格应用开发入门 二十七 漫游应用数据

一.漫游应用数据概览 1.若应用当中使用了漫游应用数据,用户可以很轻松的在不同的设备间保持应用数据的同步. 2.Windows会将更新的漫游数据同步到云端,并将数据更新到其他安装此应用的设备上. 3.Windows 限制了每个应用可漫游的应用数据大小.若我们的应用达到漫游数据大小的限制,在应用的总漫游数据再次少于该限制之前,不会将应用的任何数据更新到云端,因此最好的做法是仅为用户首选项.链接和小型数据文件使用漫游数据. 4.只要用户在所需的时间间隔内从某个设备访问应用的漫游数据,这些数据将存在云

Windows 8风格应用开发入门 二十五 数据绑定

数据绑定是一种简单方式来显示数据,UI元素与数据对象之间的连接或绑定是允许数据在两者之间 流动的.另外建立了绑定且数据发生变化时,相应的UI元素会自动显示变化. 如何将UI元素与 数据进行绑定 开发入门 二十五 数据绑定-windows开发入门"> 从上面图可以知道,每个绑定必须指定一个源和一个目标. 其中源对象可以是任何CLR对象,包括目标元素自身和其他UI元素.目标可以是 FrameworkElement的任何DependencyProperty(依赖属性). 数据绑定引擎从Bindi

Windows 8风格应用开发入门 二十四 App Bar构建

构建应用栏的目的的显示导航.命令和始终隐藏不需要的使用的工具.我们可以把应用栏放在页面 顶部或底部或同时存在顶部和底部. 默认情况在AppBar是隐藏的,当用户单击右键.按下Win+Z .或从屏幕的顶部或底部边缘轻松时可显示或关闭AppBar.当然我们也可以通过编程的方式将AppBar设 置为当用户做选择或与应用交互时显示. 构建AppBar基本步骤 通常我们构建一个应用的 AppBar,只需要三步就可以完成: 开发入门 二十四 App Bar构建-jenkins构建自由风格"> 如何构建

Windows 8风格应用开发入门 二十三 App Bar概述及使用规范

App Bar概述 Windows 8 Store应用中的App Bar(应用程序工具栏)起到的作用和Windows Phone中AppBar一样.我们可以向用户提供各种操作接口,实现导航或者触发命令等. AppBar一 般默认是隐藏的,也可以设置为始终可见.我们可以通过清扫屏幕上边缘或下边缘时显示AppBar, AppBar被点击之后或失去焦点后隐藏,当然我们也可以通过编程方式控制AppBar显示或隐藏. Windows 8 Store应用中通常包含两种AppBar: 1)底部AppBar 底