现在的位置: 首页 > 综合 > 正文

android中自定义控件

2013年08月21日 ⁄ 综合 ⁄ 共 2688字 ⁄ 字号 评论关闭

在android中可以利用android自身所带的控件按照自己的意愿进行组合、修改,达到满意效果。

这个例子是个简单的自定义控件的例子,只是继承android自身的Button控件,绑定监听器并在获得焦点时在外围用画笔画出外框。若想在Button中添加其他事件或添加其他效果,也可以此类推。

首先是Mainactivity.java:

package com.example.mybutton;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

	public MyButton mybutton;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	
		mybutton = (MyButton)findViewById(R.id.mybutton);
	}


}

在Mainactivity中只是简单的定义了一个自定义的MyButton控件。

继承Button的MyButton:

package com.example.mybutton;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MyButton extends Button implements OnClickListener{
	Paint paint;
	boolean paintflag;
	public MyButton(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
		paint = new Paint();
		paint.setStyle(Style.STROKE);
		paint.setStrokeWidth(2);
        getPaint().setColor(110);			//采用rgb形式的整数设置颜色
		setOnClickListener(this);			//绑定监听器事件
		
		paintflag = false;
	}
	
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
//		paintflag = true;
//		invalidate();			//刷新绘画
		System.out.println("===============click");
		
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {		//触摸事件
		// TODO Auto-generated method stub
		System.out.println("===============touch");
        switch (event.getAction()) {
        case MotionEvent.ACTION_UP:
            paintflag = false;
            invalidate();
            break;
        case MotionEvent.ACTION_DOWN:
        	paintflag = true;
        case MotionEvent.ACTION_CANCEL:
            invalidate();
            break;
    }

		return super.onTouchEvent(event);
	}
	
	@Override
	protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		super.onDraw(canvas);
		
		if(paintflag){
			drawfocus(canvas);
		}
		else{
			drawnofocus(canvas);
		}
	}
	
	private void drawnofocus(Canvas canvas){
		paint.setColor(0);
		canvas.drawRect(1, 1, getWidth() - 1, getHeight() - 1, paint);
	}
	
	private void drawfocus(Canvas canvas){
		int alpha = 255;
		int color = 255 | (alpha << 24);	//此处色彩值为FF0000FF,前俩表示透明度(0为透明,FF为不透明),后面的表示RGB颜色
		paint.setColor(color);
		canvas.drawRect(1, 1, getWidth() - 1, getHeight() - 1, paint);
	}
}

在这里只实现了俩功能:绑定Button的监听器和在onTouchEvent事件中利用画笔画出外框或擦去外框。

最后是布局文件:

<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.example.mybutton.MyButton
	    android:id="@+id/mybutton"
	    android:layout_width="200dp"
	    android:layout_height="200dp"
	    android:focusable="true"
	    />    
</RelativeLayout>

在布局文件中可以使用自定义的MyButton控件。这里是包名com.example.mybutton和类名(即自定义的控件名)组合而成。

 

抱歉!评论已关闭.