在android中可以运用android自身所带的控件按照自己的自愿进行组合、批改,抵达满意效果。 这个比方是个简略的自定义控件的比方,只是继承android自身的Button控件,绑定监听器并在获得焦点时在外围用画笔画出外框。若想在Button中添加其他工作或添加其他效果,也可以此类比。 首先是Mainactivity.java: package com.example.mybutton;
http://www.fp1111.info/linked/20130427.do
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工作中运用画笔画出外框或擦去外框。 最终是计划文件:
在计划文件中可以运用自定义的MyButton控件。这里是包名com.example.mybutton和类名(即自定义的控件名)组合而成。 http://www.gookp11.com/linked/20130427.do