//自定义View
public class MyView extends View{
int width=00;
int height=00;
int speedX=50;
int speddY=20;
int x=100;
int y=100;
private Paint mpaint;
public MyView(Context context) {
super(context);
}
public MyView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initPaint();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
Log.e("tag", "构造器MyView的宽=="+getWidth() );
}
private void initPaint() {
mpaint=new Paint();
mpaint.setColor(Color.BLACK);
mpaint.setStrokeWidth(10);
mpaint.setStyle(Paint.Style.STROKE);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
width=w;
height=h;
Log.e("tag","onSizeChanged MyView 的宽 == " +width+"onSizeChanged MyView 的高 =="+height);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//canvas.drawPoint(100,100,mpaint);
// mpaint.setColor(Color.RED);
// mpaint.setStrokeWidth(20);
//canvas.drawLine(20,20,200,800,mpaint);
//canvas.drawRect(20,20,200,800,mpaint);
//RectF rectF = new RectF(x, 100, y, 200);
//canvas.drawRoundRect(rectF,150,150,mpaint);
//canvas.drawCircle(getWidth()/2,getHeight()/2,150,mpaint);
//RectF rectF = new RectF(30, 50, 70, 70);
//canvas.drawOval(rectF,mpaint);
//RectF rectF = new RectF(100,100,200,200);
//canvas.drawArc(rectF,0,90,true,mpaint);
/* Path path = new Path();
path.moveTo(20,20);
path.lineTo(20,80);
//path.addRect(100,100,200,200,Path.Direction.CW);
RectF rectF = new RectF(100, 100, 200, 200);
path.arcTo(rectF,0,90,true);
path.close();
canvas.drawPath(path,mpaint);*/
canvas.drawCircle(x,y,50,mpaint);
try {
Thread.sleep(1000);
}catch (Exception e){
e.printStackTrace();
}
invalidate();
}
//用来刷新重新执行onDraw方法
@Override //隐外类得特
public void invalidate() {
super.invalidate();
mpaint.setColor(Color.RED);
x+=speedX;
y+=speddY;
if (x<=50||x>=getWidth()){
speedX *=-1;
}else if (y<=0||y>=getHeight()){
speddY *=-1;
}
}
/* //和invalidate的区别是可以在子线程中刷新UI
@Override
public void postInvalidate() {
mpaint.setColor(Color.RED);
x+=30;
y+=30;
super.postInvalidate();
}
//请求重新布局
@Override
public void requestLayout() {
super.requestLayout();
mpaint.setColor(Color.RED);
}*/
}
//MainActivity
public class MainActivity extends AppCompatActivity {
private MyView myView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myView = findViewById(R.id.myview);
}
}