1.概述
自定义控件的好处是方便操作,扩展空间大,可以自由发挥
2.思路
1.继承一个View类
2.创建一个画笔
3.重写一个画布(onDraw)
4.最后在主类中调用这个View布局
3.代码如下
public class MyView extends View {
Paint paint;
char[] array=new char[4];
Random r=new Random();
public MyView(Context context) {
super(context);
initData();
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
initData();
}
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initData();
}
public void initData(){
paint=new Paint();
//抗锯齿
// paint.setAntiAlias(true);
paint.setColor(Color.RED);
paint.setStrokeWidth(10);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// canvas.drawLine(0,0,100,100,paint);
// paint.setStyle(Paint.Style.STROKE);
// canvas.drawCircle(200,200,50,paint);
for (int i = 0; i < 4; i++) {
String a=r.nextInt(10)+”“;
char[] temp=a.toCharArray();
array[i]=temp[0];
}
// Bitmap bit= BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);
// canvas.drawBitmap(bit,200,200,paint);
canvas.drawRect(50,0,400,200,paint);
paint.setColor(Color.BLUE);
paint.setTextSize(80);
canvas.drawText(array,0,4,50,200,paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//event.getAction()得到它的动作
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
paint.setColor(Color.YELLOW);
//使无效 invalidate()类似于刷新onDraw()画布方法
invalidate();
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
paint.setColor(Color.RED);
//使无效 invalidate()类似于刷新onDraw()画布方法
// invalidate();
postInvalidate();
break;
}
//这个返回值涉及到事件消费否?
// return super.onTouchEvent(event);
// return true;
return super.onTouchEvent(event);
}
public void setPaint(){
paint.setColor(Color.BLACK);
invalidate();
}
}
//在布局中调用了上面继承view类的MyView ;
//再在mainactivity设置了一个点击事件;
package com.example.guojinlong0928;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.mv).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
((MyView)view).setPaint();
Toast.makeText(MainActivity.this,"点了",Toast.LENGTH_SHORT).show();
}
});
}
}