上一次我们讲了一堆实现自己定义控件的理论基础。列举了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之路还有非常远,我也没有举一些非常难的样例。我觉得基础知识仅仅有这些,学习了这些之后自己定义控件的基础也就讲完了,剩下的是大家在基础之上发挥了。之后假设有比較好的样例我还会继续补充的。

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

另外我也是学生,假设有写的不好或者有错误的地方还请大家多多不吝赐教,谢谢!

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

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

    前三种实现方式代码出自: http://stormzhang.com/openandroid/2013/11/15/android-custom-loading/ (源代码下载)http://down ...

  2. android 自己定义控件

    Android自己定义View实现非常easy 继承View,重写构造函数.onDraw.(onMeasure)等函数. 假设自己定义的View须要有自己定义的属性.须要在values下建立attrs ...

  3. Android自己定义控件系列五:自己定义绚丽水波纹效果

    尊重原创!转载请注明出处:http://blog.csdn.net/cyp331203/article/details/41114551 今天我们来利用Android自己定义控件实现一个比較有趣的效果 ...

  4. Android自己定义控件皮肤

    Android自己定义控件皮肤 对于Android的自带控件,其外观仅仅能说中规中矩,而我们平时所示Android应用中,一个简单的button都做得十分美观.甚至于很多button在按下时的外观都有 ...

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

    近期在捣鼓android 自己定义控件属性,学到了TypedArray以及attrs.在这当中看了一篇大神博客Android 深入理解Android中的自己定义属性.我就更加深入学习力一番.我就沿着这 ...

  6. Android自己定义控件系列二:自己定义开关button(一)

    这一次我们将会实现一个完整纯粹的自己定义控件,而不是像之前的组合控件一样.拿系统的控件来实现.计划分为三部分:自己定义控件的基本部分,自己定义控件的触摸事件的处理和自己定义控件的自己定义属性: 以下就 ...

  7. Android自己定义控件系列三:自己定义开关button(二)

    接上一篇自己定义开关button(一)的内容继续.上一次实现了一个开关button的基本功能.即自己定义了一个控件.开关button,实现了点击切换开关状态的功能.今天我们想在此基础之上.进一步实现触 ...

  8. echart图表控件配置入门(二)常用图表数据动态绑定

    上一节 <echart图表控件配置入门(一)>介绍了echarts图表控件的入门配置,使开发人员可以快速搭建出一个静态的图表.但是在实际开发过程这还是不够的,不可能所有的图表控件都是静态数 ...

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

    [工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重分享成果] 1 背景 前面分析那么多系统源代码了.也该暂停下来歇息一下,趁昨晚闲着看见一个有意思的需求就操 ...

随机推荐

  1. Appium +Python 连接真机测试

    1.数据线连接电脑和手机: 2.用adb获取手机的UUID:cmd-> adb devices 前面的就是你手机的UUID 3.打开appium,选择手机的安卓版本(关于手机中查看),填写手机的 ...

  2. Android学习--探究服务(一)

    什么是服务? 服务(service)是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要求长期运行的任务.服务的运行不依赖任何的用户界面,即使应用被切换到后台或者 ...

  3. ACM-ICPC 2018 沈阳赛区网络预赛 D. Made In Heaven(第k短路模板)

    求第k短路模板 先逆向求每个点到终点的距离,再用dij算法,不会超时(虽然还没搞明白为啥... #include<iostream> #include<cstdio> #inc ...

  4. 完全背包【p1832】A+B Problem(再升级)

    Description 给定一个正整数n,求将其分解成若干个素数之和的方案总数. Input 一行:一个正整数n Output 一行:一个整数表示方案总数 素数之和 ? 背包啊. 没一遍切的题都不是水 ...

  5. HDOJ 4812 D Tree

    Discription There is a skyscraping tree standing on the playground of Nanjing University of Science ...

  6. [BZOJ2527]Meteors

    整体二分挺好玩的...学一发 这个询问显然是可以二分的,但每次都二分就会T爆,所以我们有了“整体”二分 每次处理一些询问,要求这些询问的答案一定在$[l,r]$中 先把$l$到$mid$的操作实施,那 ...

  7. 【母函数】hdu2082 找单词

    普通型母函数详解见这里:http://www.wutianqi.com/?p=596 裸题,存个板子. #include<cstdio> #include<cstring> u ...

  8. 10.4(java学习笔记)CLOB,BLOB基本操作

    一.CLOB 1.1CLOB简介 CLOB全称是(Character Large Object)字符大对象,用于存储大量的文本数据. 字符大对象的操作不同于一般数据,是通过流来完成的. 1.2MySQ ...

  9. java单例支持高并发

    单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.这样的模式有几个好处: 1.某些类创建比较频繁,对于一些大型的对象,这是一笔 ...

  10. JavaScript之链式结构序列化1

    一.概述 在JavaScript中,链式模式代码,太多太多,如下: if_else: if(...){ //TODO }else if(...){ //TODO }else{ //TODO } swi ...