100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Android开发自定义的View

Android开发自定义的View

时间:2022-12-03 14:43:35

相关推荐

Android开发自定义的View

独角兽企业重金招聘Python工程师标准>>>

当开发者打算派生自己的UI组件时,首先定义一个继承View基类的子类,然后重写View类的一个或多个方法,通常可以被用户重写的方法如下:

构造器:重写构造器是定制View的最基本方式,当Java代码创建一个View实例,根据XML布局文件加载并构建界面时将需要调用该构造器。

-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) 当松开某个键触发该方法。

-onTrackballEvent(MotionEvent) 当发生轨迹球事件时触发该方法。

-onTouchEvent(MotionEvent) 当发生触摸屏事件时触发该方法。

-onWindowFocusChanged(boolean) 当该组件得到、失去焦点时触发该方法。

-onAttachedToWindow() 当把该组件放入某个窗口时触发该方法。

-onDetachedFromWindow() 当把该组件从某个窗口上分离时触发该方法。

-onWindowVisibilityChanged(int) 当包含该组件的窗口的可见性发生改变时触发该方法。

实例:跟随手指的小球

使用自定义的UI组件,将会在指定位置绘制一个小球,这个位置可以动态改变。当用户通过手指在屏幕上拖动时,程序监听到这个手机动作,并把手指动作的位置传入到自定义的UI组件,并通知该组件重绘即可。

DrawView.java

package org.crazyit.customview;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.View;/*** @author gufei* @version 1.0*/public class DrawView extends View{public float currentX = 40;public float currentY = 50;/*** @param context*/public DrawView(Context context){super(context);// TODO Auto-generated constructor stub}@Overridepublic void onDraw (Canvas canvas){super.onDraw(canvas);//创建画笔Paint p = new Paint();//设置画笔的颜色p.setColor(Color.RED);//绘制一个小圆(作为小球)canvas.drawCircle(currentX , currentY , 15 , p);}}

接下来用Java代码把该组件添加到指定容器中,这样既可以看到组件的运行效果。下面是该应用的Activity类

package org.crazyit.customview;import org.crazyit.customview.R;import org.crazyit.customview.R.layout;import android.app.Activity;import android.os.Bundle;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.widget.LinearLayout;/*** @author gufei* @version 1.0*/public class CustomView extends Activity{@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);//获取布局文件中的LinearLayout容器LinearLayout root = (LinearLayout)findViewById(R.id.root);//创建DrawView组件final DrawView draw = new DrawView(this);//设置自定义组件的最大宽度、高度draw.setMinimumWidth(300); draw.setMinimumHeight(500); //为draw组件绑定Touch事件draw.setOnTouchListener(new OnTouchListener(){@Overridepublic boolean onTouch(View arg0, MotionEvent event){//修改draw组件的currentX、currentY两个属性draw.currentX = event.getX();draw.currentY = event.getY();//通知draw组件重绘draw.invalidate();//返回true表明处理方法已经处理该事件return true;}});root.addView(draw);}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。