Android自定View组件方法

一、开发自定义View组件

View组件只是一个矩形的空白区域,并没有任何内容。对于Android应用的其他UI组件来说,它们都继承于View组件,然后在View组件提供的空白区域上绘制外观。当Android系统提供的UI组件不足以满足项目需要时,我们可以通过继承View来派生一个自定义组件。

举一个实例:实现一个跟随手指的小球。当用户通过手指在屏幕上拖动时,程序监听到这个手机动作,并把手指动作的位置传入自定义UI组件,并通知该组件重绘即可。开发步骤如下:

1.实现一个继承于View的子类

package com.example.mycustomview;

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;
/**
 *	项目名称/版本号:MyCustomView/v1.0
 *	包   名:com.example.mycustomview
 *	类描述:绘制一个小球,并初始化其位置
 *	创建人:jiangdongguo
 *	创建时间:2015-5-26 上午11:18:42
 * 博客地址:http://blog.csdn.net/u012637501
 */
public class DrawView extends View {

public DrawView(Context context, AttributeSet attrs) {
super(context, attrs);
}
private float currentX = 40;
private float currentY = 50;
/**
 * 定义并创建画笔
 * */
Paint paint = new Paint();
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setColor(Color.RED);	 //设置画笔的颜色
canvas.drawCircle(currentX, currentY, 30, paint);//指定位置绘制半径大小为15的圆
}
/**
 * 为该组件的触屏事件重写事件处理方法
 * */
public boolean onTouchEvent(MotionEvent event) {
currentX = event.getX();	 //获取当前触屏位置并修改currentX,currentY
currentY = event.getY();
invalidate();	 //通知当前组件重绘自己(即回调onDraw方法)
return true;
}
}

2.在布局文件中添加自定义组件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- 包名.类名 -->
   <com.example.mycustomview.DrawView
       android:layout_width="match_parent"
       android:layout_height="match_parent"/>
</LinearLayout>

效果演示:

自定义UI组件常用重写方法总结:

>onFinishInflate():当应用从XML布局文件加载该组件并利用它来构建界面之后,该方法被回调;

>onMeasure(int,int):调用该方法来检测View组件及它所包含的所有子组件的大小;

>onLayout(boolean,int,int,int,int):当该组件需要分配其子组件的位置、大小时,回调该方法;

>onSizeChanged(int,int,int,int):当该组件的大小被改变时回调该方法;

>onDraw(Canvas):当该组件将要绘制它的内容时回调该方法进行绘制;

>onKeyDown(int,KeyEvent):当某个键被按下时触发该方法

>onKeyUp(int,KeyEvent):当松开某个键时触发该方法

>onTouchEvent(MotionEvent):当发生触屏事件时触发该方法

  二、View类常用的XML属性

View类是所有可视化控件的基类,主要提供了控件绘制和事务处理的方法。创建用户界面所使用的控件都继承自View,如EditText、TextView、Button等。View及其子类的相关属性,既可以在布局XML文件中进行相关设置,也可以通过成员方法在Java代码中动态设置。

◇android:background:设置背景色/背景图片。可以通过以下两种方法设置背景为透明:”@android:color/transparent”和”@null”

◇android:layout_margin:       设置整个组件上下左右距离其他组件的边距,以像素为单位填充空白。

◇android:layout_marginLeft :设置整个组件左距离其他组件的边距,以像素为单位填充空白。

◇android:layout_marginRight :设置整个组件右距离其他组件的边距,以像素为单位填充空白。

◇android:layout_marginTopt :设置整个组件顶距离其他组件的边距,以像素为单位填充空白。

◇android:layout_marginBottom :设置整个组件底距离其他组件的边距,以像素为单位填充空白

◇android:clickable :是否响应点击事件。

◇android:contentDescription :设置View的备注说明,作为一种辅助功能提供,为一些没有文字描述的View提供说明,

◇ndroid:fadingEdge :设置拉滚动条时 ,边框渐变的放向。none(边框颜色不变),horizontal(水平方向颜色变淡),vertical(垂直方向颜色变淡)

◇android:fadingEdgeLength :设置边框渐变的长度

◇android:fitsSystemWindows:设置布局调整时是否考虑系统窗口(如状态栏)

◇android:isScrollContainer :设置当前View为滚动容器,ListView/ GridView/ ScrollView根本就不用设置这个属性,而EdidText设置android:scrollbars也能出滚动条。

◇android:keepScreenOn:View在可见的情况下是否保持唤醒状态

◇android:longClickable:设置是否响应长按事件.

◇android:padding 设置上下左右的边距,以像素为单位填充空白。

◇android:paddingBottom 设置底部的边距,以像素为单位填充空白。

◇android:paddingLeft 设置左边的边距,以像素为单位填充空白。

◇android:paddingRight 设置右边的边距,以像素为单位填充空白。.

◇android:paddingTop 设置上方的边距,以像素为单位填充空白。

◇android:scrollX 以像素为单位设置水平方向滚动的的偏移值,在GridView中可看的这个效果。

◇android:scrollY 以像素为单位设置垂直方向滚动的的偏移值

◇android:scrollbars 设置滚动条显示。none(隐藏),horizontal(水平),vertical(垂直)。

◇android:visibility 设置是否显示View。设置值:visible(默认值,显示),invisible(不显示,但是仍然占用空间),gone(不显示,不占用空间)

◇android:onClick 点击时从上下文中调用指定的方法。

◇android:drawableRight :在text的右边输出一个drawable,如图片

◇android:autoLink 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接

◇android:textScaleX :控制字与字之间的间距

◇android:textAlign :设置文字显示位置,EditText没有这个属性,但TextView有

◇android:autoText  :如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。

◇android:editable :是否可编辑

◇android:textColorHint :设置提示信息文字的颜色,默认为灰色

◇android:textAppearance

textAppearanceButton、textAppearanceInverse、textAppearanceLarge、textAppearanceLargeInverse、textAppearanceMedium、textAppearanceMediumInverse、textAppearanceSmall、textAppearanceSmallInverse

设置文字外观。如“?android:attr/textAppearanceLargeInverse”这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。

参考:http://blog.csdn.net/heng615975867/article/details/8910750

时间: 2024-11-09 11:48:15

Android自定View组件方法的相关文章

Android应用自定义View绘制方法手册

背景 这篇迟迟难产的文章算是对2015前半年的一个交代吧,那时候有一哥们要求来一发Android Canvas相关总结,这哥们还打赏了,实在不好意思,可是这事一放就给放忘了,最近群里小伙伴催着说没更新博客,坐等更新啥的,随先有这么一篇Android应用开发超级基础的文章诞生了(因为这种文章最好写哈,就是用熟了就行).不得不说下这么久为何一直没更新博客的原因了,首先遇上了过年,我个人崇尚过节就该放下一切好好陪陪亲人,珍惜在一起的时光:其次今年开年很是蛋疼,不是不顺当就是深深的觉得被坑,所以心情也就

Android中移动view的方法总结

分为2大类,一种是时间可控的移动,暂且叫平滑移动,另一种则是瞬间移动了. 1.通过直接更改view的left,top,right,bottom的方法(瞬间移动) layout(r,t,r,b); offsetLeftAndRight(offset); offsetTopAndBottom(offset); 2.scroll方法(瞬间移动) scrollTo(x,y); scrollBy(x,y); 3.Scroller配合scrollTo实现平滑移动 4.自定义Animation配合scroll

android之在view中内嵌浏览器的方法

我要做的一个东西是在一个页面的中间嵌入浏览器,一开始不知道从哪里开始,因为以前用的都是Textveiw或者editVeiw之类的控件,而它们并不能用来显示网页的内容,怎么办呢? 首先想到的是:是不是有一个用来显示网页的View呢,于是我就在eclipse里xml编辑器里输入<web,哈哈,果然下面有个提示是webVeiw,那么能不能用它呢?于是到网上搜一下它的资料,果然可以的,下面就开始吧. 先在xml里把webview建好,在代码里用findViewById()将其取出来.我的代码是: Web

Android Studio开发基础之自定义View组件

一般情况下,不直接使用View和ViewGroup类,而是使用使用其子类.例如要显示一张图片可以用View类的子类ImageView,开发自定义View组件可分为两个主要步骤: 一.创建一个继承自android.view.View类的View类,并且重写构造方法. 如下,新建一个名为MyView.Java的Java类文件,重写一个带Context的构造方法和onDraw()方法(用来重新绘制Activity窗口的背景). package com.example.lhb.contentprovid

【Android 应用开发】 自定义 View 组件 -- 圆形进度条

转载著名出处 : http://blog.csdn.net/shulianghan/article/details/40351487 代码下载 : -- CSDN 下载地址 : http://download.csdn.net/detail/han1202012/8069497 ; -- GitHub 地址 : https://github.com/han1202012/CircleProcess.git ; -- 工程示例 : 一. 相关知识点解析 1. 自定义 View 组件构造方法 构造方

android view组件draw onDraw,dispatchDraw

Android的view组件显示主要经过mesure, layout和draw这三个过程.在mesure阶段里调用mesure(int widthSpec, int heightSpec)方法,这个方法是final不能被重写,在这个过程里会调用onMesure(int widthSpec, int heightSpec)方法.当组件设置好大小后,调用final layout(int l, int t, int r, int b)方法进行布局,在这个过程里会调用onLayout(boolean c

Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件

UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的.View是绘制在屏幕上能与用户进行交互的一个对象.而对于ViewGroup来说,则是一个用于存放其他View和ViewGroup对象的布局容器! Android为我们提供了View和ViewGroup的两个子类的集合,提供常用的一些输入控件(比如按钮,图片和文本域等)和各种各样的布局模式(比如线程布局,相对布局,绝对布局,帧布局,表格布局等). 用户界面布局 在你APP软件上的,用户界面上显示

Android编程动态创建视图View的方法

在Android开 发中,在Activity中关联视图View是一般使用setContentView方法,该方法一种参数是使用XML资源直接创 建:setContentView (int layoutResID),指定layout中的一个XML的ID即可,这种方法简单.另一个方法是 setContentView(android.view.View),参数是指定一个视图View对象,这种方法可以使用自定义的视图类. 在一些场合中,需要对View进行一些定制处理,比如获取到Canvas进行图像绘制,

关于Android界面编程与视图(View)组件

UI组件--------------->android.widget.* View组件------------->android.view.* 视图(View)组件 所有UI组件都是建立在视图(View)组件.容器(ViewGroup)组件基础之上的. UI组件继承之View组件 ViewGroup----------->作为其他组件的容器使用. ViewGroup包含View组件即 (UI组件---->继承自View组件. ViewGroup组件---->继承自View组件