android的自定义控件简单(一)

转自:http://www.2cto.com/kf/201408/324688.html

一个自定义的控件通常可能重写以下的方法:

     1.一个构造方法, 获取Context。

2.onFinishlnflate()这是一个回调方法, 当应用从 XML 布局文件加载该组件并利用

它来构建界面之后, 该方法就会被回调

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

4.onlayout(boolean,int,int,int,int):当该组件需要分配其子组件的位置、大小时,

该方法就会被回调. View类中布局发生改变时会调用的方法,这个方法是所有View、ViewGroup及其派生类都具有的方法,重载该类可以在布局发生改变时作定制处理,这在实现一些特效时非常有用。

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

6.onDraw(canves): 当该组件将要绘制它的内容时回调该方法迸行绘制. View类中用于重绘的方法,这个方法是所有View、ViewGroup及其派生类都具有的方法,也是Android UI绘制最重要的方法。开发者可重载该方法,并在重载的方法内部基于参数canvas绘制自己的各种图形、图像效果。


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

8.onKayUp(int,KeyEvent), 当松开某个键时触发该方法.


9.onTrackballEvent (MotionEvent): 当发生轨迹球事件时触发该方法.


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


11.onWindowFocuschanged(boolean): 当该组件得到、失去焦点时触发该方法.

12.onAttachedToWindow():当把该组件放入某个窗口时触发该方法.

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

14.onWindowVisibilityChanged(int):当包含该组件的窗口的可见性发生改变时触发该

方法.


简单的例子:
创建一个类继承View
package com.zw.zidingyikongjian;
/**
 * 继承View重写onDraw()方法
 * zhangwei
 */

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;

public class ZiDingYiView extends View {

	private float circleX=40;//显示位置的X坐标
	private float circleY=60;
	private float circleR=30;//半径
	
	public ZiDingYiView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}
   
//  重写ondraw方法
	@Override
   protected void onDraw(Canvas canvas) {
	super.onDraw(canvas);
	//创建并实例化Paint的对象
	Paint p=new Paint();
	p.setColor(Color.RED);
	//绘制小圆点
	canvas.drawCircle(circleX, circleY, circleR, p);
	
   }
	
	
 public float getCircleX() {
		return circleX;
	}

	public void setCircleX(float circleX) {
		this.circleX = circleX;
	}

	public float getCircleY() {
		return circleY;
	}

	public void setCircleY(float circleY) {
		this.circleY = circleY;
	}

	public float getCircleR() {
		return circleR;
	}

	public void setCircleR(float circleR) {
		this.circleR = circleR;
	}
   
}



《二》在activity_main.xml文件中加入布局,如下:

<RelativeLayout 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=".MainActivity" >


    <com.zw.zidingyikongjian.ZiDingYiView
        android:id="@+id/drawView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />


</RelativeLayout>

《三》在MaiActivity.java中书写逻辑
public class MainActivity extends Activity {


private ZiDingYiView drawView=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawView=(ZiDingYiView) findViewById(R.id.drawView);
//
drawView.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
drawView.setCircleX(event.getX());
drawView.setCircleY(event.getY());

drawView.invalidate();
return true;
  }
  });
 }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值