上一次我们讲了一堆实现自己定义控件的理论基础。列举了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. web模拟telnet

    https://blog.csdn.net/midion9/article/details/51781402 https://blog.csdn.net/hackstoic/article/detai ...

  2. Nodejs微信开发

    因为使用了Bot Framework开发了一个小功能,它目前支持了Skype\Teams\Slack等,但在国内来讲,微信还是一个比较流行的软件,所以需要接上微信 原来开发Bot的时候使用的是.Net ...

  3. xunsearch: 开启后台服务,索引……随笔记录

    重启后台服务: cd $prefix ; bin/xs-ctl.sh restart 索引: # 导入 MySQL 数据库的 dbname.tbl_post 表到 demo 项目中,并且平滑重建 ut ...

  4. php中的int参数

    PHP的函数有很多都会有一个int参数,这些参数基本都是定义为一个常量,虽然不知道有啥用,先记录一下 他们对应的数字 1. htmlspecialchars(),htmlentities() http ...

  5. 形态学函数cvMorphologyEx

    OpenCV提供了通用的形态学函数cvMorphologyEx,该函数能够实现开运算,闭运算,形态梯度,礼帽操作,黑帽操作 接口形式 编辑 void cvMorphologyEx(const CvAr ...

  6. [CF418E]Tricky Password

    题意:有一个无限行$n$列的数表$a_{i,j}$,对于第$i\geq2$行,$a_{i,j}$为$a_{i-1,j}$在$a_{i-1,1\cdots j}$中出现的次数,要维护这个数表,支持修改第 ...

  7. 【枚举】【前缀和】【map】ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) C. Molly's Chemicals

    处理出前缀和,枚举k的幂,然后从前往后枚举,把前面的前缀和都塞进map,可以方便的查询对于某个右端点,有多少个左端点满足该段区间的和为待查询的值. #include<cstdio> #in ...

  8. 【博弈论】bzoj1115 [POI2009]石子游戏Kam

    差分后与阶梯博弈很类似. #include<cstdio> using namespace std; int n,T,a[1001],ans; int main() { scanf(&qu ...

  9. ASP.NET MVC快速开发框架清新简洁界面设计,有兴趣可以模仿参考

    软件的用户体验很重要,要抓住用户的心,这篇博文分享一下最近一个项目的UI设计. 我做UI设计是从用户的角度出发的,要去揣摩用户的习惯. 大部分用户都是使用windows操作系统,所以我这套软件的风格也 ...

  10. mORMot访问远程数据库

    mORMot访问远程数据库 mORMot中提供了TOleDBJetConnectionProperties类来处理Access的mdb数据库的访问,自带线程池.通过TSQLDBServerHttpAp ...