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


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。