Android学习:自定义组件,DrawView
布局文件:
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context=".CustomViewActivity"
- android:id="@+id/root"
- android:orientation="vertical">
- </LinearLayout>
自定义类:
这个类必须写在一个独立的java文件中
- public class DrawView extends View
- {
- public float currentX = 40;
- public float currentY = 50;
- // 定义、并创建画笔
- Paint p = new Paint();
- public DrawView(Context context)
- {
- super(context);
- }
- public DrawView(Context context , AttributeSet set)
- {
- super(context,set);
- }
- @Override
- public void onDraw(Canvas canvas)
- {
- super.onDraw(canvas);
- // 设置画笔的颜色
- p.setColor(Color.RED);
- // 绘制一个小圆(作为小球)
- canvas.drawCircle(currentX, currentY, 15, p);
- }
- // 为该组件的触碰事件重写事件处理方法
- @Override
- public boolean onTouchEvent(MotionEvent event)
- {
- // 修改currentX、currentY两个属性
- currentX = event.getX();
- currentY = event.getY();
- // 通知当前组件重绘自己
- invalidate();
- // 返回true表明该处理方法已经处理该事件
- return true;
- }
- }
将组件添加到容器中去
- public class MainActivity extends AppCompatActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- LinearLayout root=(LinearLayout) findViewById(R.id.root);
- final myDrawView draw=new myDrawView(this);
- draw.setMinimumWidth(300);
- draw.setMinimumHeight(500);
- root.addView(draw);
- }
- }
也可以在布局文件里加载自定义的组件。把布局文件修改如下:
Android studio在写布局文件的时候,代码补全可以侦测到自定义组件的名字,确实很智能。
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context="myDrawView"
- android:id="@+id/root"
- android:orientation="vertical">
- <allegro.mydrawview.myDrawView
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
- </LinearLayout>
这样在java代码中不必要额外写代码加载自定义的组件了。下面的代码已经注释了加载组件的代码。
- public class MainActivity extends AppCompatActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- /*LinearLayout root=(LinearLayout) findViewById(R.id.root);
- final myDrawView draw=new myDrawView(this);
- draw.setMinimumWidth(300);
- draw.setMinimumHeight(500);
- root.addView(draw);*/
- }
- }
这个程序的效果是,随手指移动的小球。
Android学习:自定义组件,DrawView的更多相关文章
- Android学习----自定义Adapter实现ListView
前言: 对于ListView而言,自定义的Adapter对于显示复杂的界面有很大的灵活性 .使用自定义的Adapter需要继承BaseAdapter,然后重写getCount(),getView(), ...
- Android学习自定义Dialog
Dialog是Android提供的各种对话框的基类,和上篇的DialogFragment类似.为什么还要介绍Dialog呢,因为DialogFragment只能运行在Android3.0以上的系统中. ...
- Android学习笔记 Toast屏幕提示组件的使用方法
activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...
- 【转】Android学习基础自定义Checkbox组件
原文网址:http://forum.maiziedu.com/thread-515-1-1.html heckbox组件是一种可同时选中多项的基础控件,即复选框,在android学习中,Checkbo ...
- android学习日记20--连接组件之Intent和IntentFilter
上次刚了解完Android的四大组件,现在学习组件间通信的Intent和IntentFilter 一.Intent 1.简述 Intent(意图)在应用程序运行时连接两个不同组件,是一种运行时的绑定机 ...
- Android之自定义View学习(一)
Android之自定义View学习(一) Canvas常用方法: 图片来源 /** * Created by SiberiaDante on 2017/6/3. */ public class Bas ...
- Android学习系列(3)--App自动更新之自定义进度视图和内部存储
友好的视觉感知和稳定的不出错表现,来自于我们追求美感和考虑的全面性,博客园从技术的角度,一直我都很欣赏.这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用. 这 ...
- 【转】 Pro Android学习笔记(六五):安全和权限(2):权限和自定义权限
目录(?)[-] 进程边界 声明和使用权限 AndroidManifestxml的许可设置 自定义权限 运行安全通过两个层面进行保护.进程层面:不同应用运行在不同的进程,每个应用有独自的user ID ...
- Android自定义组件系列【5】——进阶实践(2)
上一篇<Android自定义组件系列[5]--进阶实践(1)>中对任老师的<可下拉的PinnedHeaderExpandableListView的实现>前一部分进行了实现,这一 ...
随机推荐
- 【转】Java基础:System.out.println与System.err.println的区别
同时使用了System.out.println与System.err.println()打印输入内容,结果看到的内容和预想的不一样,顺序与预料的不同并不是因为err和out的区别导致,而是因为他们是两 ...
- python之property属性
Property的概念:property是一种特殊的属性,访问它时会执行一段功能(函数),然后返回值. import math class Circle: def __init__(self,radi ...
- Vue(五)模板
模板 1. 简介 Vue.js使用基于HTML的模板语法,可以将DOM绑定到Vue实例中的数据 模板就是{{}},用来进行数据绑定,显示在页面中 也称为Mustache语法 2. 数据绑定的方式 a. ...
- Vue(三)常用指令
(1) v-model 双向数据绑定,一般用于表单元素 <script> window.onload=function(){ new Vue({ // el:'.itany', el:'d ...
- pip的基本使用
pip的基本使用 1.pip简介 pip 是一个现代的,通用的 Python 包管理工具.提供了对 Python 包的查找.下载.安装.卸载的功能 pip是官方推荐的安装和管理Python包的工具,用 ...
- 国际化之iPhone设备支持的语种
有没有想过,iPhone 语言到底支持多少语言呢?我倒是搜索了一下,整理出下面一份列表,供大家参考 参考链接: https://www.ibabbleon.com/iOS-Language-Codes ...
- JS对HTML字符的转义
function htmlEscape(str){ var s = ""; if(str.length == 0) return ""; s = str.rep ...
- java-Freemarker TemplateLoader实现模版
TemplateLoader的实现 作为一个模板文件加载的抽象,自然不能限制模板来自何方,在FreeMarker中由几个主要的实现类来体现,这些TemplateLoader是可以独立使用的,Webap ...
- php : 开发记录(2017-03-10)
0.后台 循环N*10000次操作的简单处理 后台需要循环做N*10000次级别的工作时候,比如,发送邮件,推送通知.可以先把所有数据导入数据表(数据库操作所需的时间1~2秒),然后前台循环发送请求, ...
- [转]awsome-java
原文链接 Awesome Java A curated list of awesome Java frameworks, libraries and software. Contents Projec ...