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-10 16:43:22

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

android 自己定义控件

Android自己定义View实现非常easy 继承View,重写构造函数.onDraw.(onMeasure)等函数. 假设自己定义的View须要有自己定义的属性.须要在values下建立attrs.xml. 在当中定义你的属性. 在使用到自己定义View的xml布局文件里须要增加xmlns:前缀="http://schemas.android.com/apk/res/你的应用所在的包路径". 在使用自己定义属性的时候.使用前缀:属性名,如my:textColor="#FF

Android自己定义控件:进度条的四种实现方式

前三种实现方式代码出自: http://stormzhang.com/openandroid/2013/11/15/android-custom-loading/ (源代码下载)http://download.csdn.net/detail/chaoyu168/9616035 近期一直在学习自己定义控件,搜了很多大牛们Blog里分享的小教程.也上GitHub找了一些类似的控件进行学习.发现读起来都不太好懂,就想写这么一篇东西作为学习笔记吧. 一.控件介绍: 进度条在App中非经常见,比例如以下载

Android自定义用户控件简单范例(二)

对于完全由后台定制的控件,并不是很方便其他人的使用,因为我们常常需要看到控件放到xml界面上的效果,并根据效果进行布局的调整,这就需要一个更加标准的控件制作流程: 我们的自定义控件和其他的控件一样,应该写成一个类,而这个类的属性是是有自己来决定的. 我们要在res/values目录下建立一个attrs.xml的文件,并在此文件中增加对控件的属性的定义. 使用AttributeSet来完成控件类的构造函数,并在构造函数中将自定义控件类中变量与attrs.xml中的属性连接起来. 在自定义控件类中使

Android自己定义控件而且使其能够在xml中自己定义属性

为什么要自己定义View android开发中自己定义View的优点是显而易见的.比方说以下的这个顶部导航,它被设计出如今应用的每一个界面,但每次的内容却不尽同样.我们不能在每一个layout资源中都配置一组同样的View吧?假设使用<include layou="@layout/xxx"/>标签,尽管攻克了布局文件的重用性,可是相关View的初始化设置还是没可以重用(集中),须要每次都採用view.findViewById(id)来初始化他们. 有了对"可重用性

Android自己定义控件皮肤

Android自己定义控件皮肤 对于Android的自带控件,其外观仅仅能说中规中矩,而我们平时所示Android应用中,一个简单的button都做得十分美观.甚至于很多button在按下时的外观都有一定变化,用户体验十分好. 这当中,就涉及到了Android自己定义控件属性的操作方法,下面操作以实现自己定义button皮肤为例. 1. 我们要自己定义将要实现的外观状态.能够是图片或者是自己定义的xml,这是我们直接自己定义不同状态的颜色xml,在values文件夹下新建colors.xml,代

android 自己定义控件属性(TypedArray以及attrs解释)

近期在捣鼓android 自己定义控件属性,学到了TypedArray以及attrs.在这当中看了一篇大神博客Android 深入理解Android中的自己定义属性.我就更加深入学习力一番.我就沿着这个学习,讲一下流程吧,兴许一篇还有应用. 1.attrs文件编写 <?xml version="1.0" encoding="utf-8"?> <resources> <attr name="titleText" for

Android自己定义控件(状态提示图表)

[工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重分享成果] 1 背景 前面分析那么多系统源代码了.也该暂停下来歇息一下,趁昨晚闲着看见一个有意思的需求就操练一下分析源代码后的实例演练--自己定义控件. 这个实例非常适合新手入门自己定义控件.先看下效果图: 横屏模式例如以下: 竖屏模式例如以下: 看见没有.这个控件全然自己定义的,连文字等都是自己定义的,没有不论什么图片等资源,就仅仅是一个小的java文件,这个界面仅仅有一个控件.例如以下咱们看下实现代

Android自己定义控件系列案例【五】

案例效果: 案例分析: 在开发银行相关client的时候或者开发在线支付相关client的时候常常要求用户绑定银行卡,当中银行卡号一般须要空格分隔显示.最常见的就是每4位数以空格进行分隔.以方便用户实时比对自己输入的卡号是否正确.当产品经理或UI设计师把这种需求拿给我们的时候.我们的大脑会立即告诉我们Android中有个EditText控件能够用来输入卡号,但好像没见过能够分隔显示的属性或方法啊.当我们睁大眼睛对着效果图正发呆的时候.突然发现当用户输入内容的时候还出现了清空图标,点击清空图标还能

Android自己定义控件之轮播图控件

背景 近期要做一个轮播图的效果.网上看了几篇文章.基本上都能找到实现,效果还挺不错,可是在写的时候感觉每次都要单独去又一次在Activity里写一堆代码.于是自己封装了一下.这里仅仅是做了下封装成一个控件,不必每次反复写代码了. 效果图 实现分析 轮播图的功能就是实现左右滑动的广告.图片信息展示,那我们就用ViewPager来实现,由于考虑到用户体验,我们还须要在以下加一个指示器来标示滑动到了第几张轮播图.指示器我们能够用一个线性布局来依据要展示的轮播图设置显示的View,我们要做这种一个控件没