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之路还有非常远,我也没有举一些非常难的样例。我觉得基础知识仅仅有这些,学习了这些之后自己定义控件的基础也就讲完了,剩下的是大家在基础之上发挥了。之后假设有比較好的样例我还会继续补充的。
源代码我会在下次一并发给大家链接的,希望大家能学到一些东西~
另外我也是学生,假设有写的不好或者有错误的地方还请大家多多不吝赐教,谢谢!
Android 自己定义控件开发入门(二)的更多相关文章
- Android自己定义控件:进度条的四种实现方式
前三种实现方式代码出自: http://stormzhang.com/openandroid/2013/11/15/android-custom-loading/ (源代码下载)http://down ...
- android 自己定义控件
Android自己定义View实现非常easy 继承View,重写构造函数.onDraw.(onMeasure)等函数. 假设自己定义的View须要有自己定义的属性.须要在values下建立attrs ...
- Android自己定义控件系列五:自己定义绚丽水波纹效果
尊重原创!转载请注明出处:http://blog.csdn.net/cyp331203/article/details/41114551 今天我们来利用Android自己定义控件实现一个比較有趣的效果 ...
- Android自己定义控件皮肤
Android自己定义控件皮肤 对于Android的自带控件,其外观仅仅能说中规中矩,而我们平时所示Android应用中,一个简单的button都做得十分美观.甚至于很多button在按下时的外观都有 ...
- android 自己定义控件属性(TypedArray以及attrs解释)
近期在捣鼓android 自己定义控件属性,学到了TypedArray以及attrs.在这当中看了一篇大神博客Android 深入理解Android中的自己定义属性.我就更加深入学习力一番.我就沿着这 ...
- Android自己定义控件系列二:自己定义开关button(一)
这一次我们将会实现一个完整纯粹的自己定义控件,而不是像之前的组合控件一样.拿系统的控件来实现.计划分为三部分:自己定义控件的基本部分,自己定义控件的触摸事件的处理和自己定义控件的自己定义属性: 以下就 ...
- Android自己定义控件系列三:自己定义开关button(二)
接上一篇自己定义开关button(一)的内容继续.上一次实现了一个开关button的基本功能.即自己定义了一个控件.开关button,实现了点击切换开关状态的功能.今天我们想在此基础之上.进一步实现触 ...
- echart图表控件配置入门(二)常用图表数据动态绑定
上一节 <echart图表控件配置入门(一)>介绍了echarts图表控件的入门配置,使开发人员可以快速搭建出一个静态的图表.但是在实际开发过程这还是不够的,不可能所有的图表控件都是静态数 ...
- Android自己定义控件(状态提示图表)
[工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重分享成果] 1 背景 前面分析那么多系统源代码了.也该暂停下来歇息一下,趁昨晚闲着看见一个有意思的需求就操 ...
随机推荐
- GO语言的数据结构测试
用于docker了,go也慢慢看一些.. 推荐书籍<go语言实践>就是<Go in Action>的中文版,有文字版PDF的. package main import ( &q ...
- CSS基本属性—文本属性和背景属性
一.CSS常用文本属性 [css中的颜色表示方式] 1.直接使用颜色的单词表示:red.green.blue 2.使用颜色的十六进制表示:#ff0000,#00ff00: 六位数,两两 ...
- scrapy xpath 从response中获取li,然后再获取li中img的src
lis = response.xpath("//ul/li") for li in lis: src = li.xpath("img/@src") # 如果xp ...
- pyinstaller对多进程程序的打包
在使用python的第三方库pyinstaller对多进程程序进行打包时,程序不能正常的运行,但是后台却有多个进程一直在使用资源. 解决方法很简单,在if __name__ == '__main__' ...
- 20180824Noip模拟赛10分总结
嗯,总之,是我太傻了. 我真傻,真的,我单知道最小生成树,却不知道还有最大生成树 T1 最大生成树.... 累加每一个环内,最大生成树的边权,(对环求最大生成树,则必然剩下一个边权最小的边(因为是求生 ...
- 微信小程序开发教程(一)准备
1.成为微信公众平台开发者 成为微信公众平台的开发者,是小程序开发的首要条件.只有成为微信公众平台的开发者,才可以使用公众平台的各种开发接口.如果你已经是开发者,则可以跳过本章. ①.进入微信公众平台 ...
- Maven / Nexus 的用法和经验
Maven / Nexus 的用法和经验
- hadoop FileSplit
/** A section of an input file. Returned by {@link * InputFormat#getSplits(JobContext)} and passed t ...
- vscode monokai
https://studiostyl.es/schemes/sublime-text-3-monokai
- javascript设计模式 第一章 灵活的javascript
javascript 设计模式 第1章 灵活的语言--JavaScript 初级程序员接到一个验证表单功能的任务,需要验证用户名.邮箱.密码等 ** 此文章内容大部分来自 <javascript ...