画板
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<SurfaceView
android:id="@+id/surView"
android:layout_weight="9"
android:layout_width="match_parent"
android:layout_height="0dp" />
<Button
android:id="@+id/but_clear"
android:text="clear"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
//
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback{
SurfaceView surView;
Button but_clear;
SurfaceHolder surfaceHolder;
Path path = new Path();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surView = findViewById(R.id.surView);
but_clear = findViewById(R.id.but_clear);
surfaceHolder = surView.getHolder();
surfaceHolder.addCallback(this);
but_clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
path.reset();
}
});
surView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action){
case MotionEvent.ACTION_DOWN:
path.moveTo(event.getX(),event.getY());
break;
case MotionEvent.ACTION_MOVE:
path.lineTo(event.getX(),event.getY());
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
});
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
new MyThread().start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
class MyThread extends Thread{
@Override
public void run() {
super.run();
Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(10);
while(true){
Canvas canvas = surfaceHolder.lockCanvas();
if(canvas==null){
break;
}
int a= (int) (Math.random()*255);
int b= (int) (Math.random()*255);
int c= (int) (Math.random()*255);
paint.setColor(Color.rgb(a,b,c));
canvas.drawColor(Color.WHITE);
canvas.drawPath(path,paint);
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
画梯形和三角形
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback{
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = findViewById(R.id.surf);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
Paint paint=new Paint();
paint.setColor(Color.RED);
paint.setStrokeWidth(10);
Canvas canvas = surfaceHolder.lockCanvas();
//梯形
canvas.drawLine(500,300,700,300,paint);
canvas.drawLine(300,500,900,500,paint);
canvas.drawLine(500,300,300,500,paint);
canvas.drawLine(700,300,900,500,paint);
//三角形
canvas.drawLine(300,1000,700,1000,paint);
canvas.drawLine(300,1000,500,600,paint);
canvas.drawLine(700,1000,500,600,paint);
surfaceHolder.unlockCanvasAndPost(canvas);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
}
点击开始可以跑 点击停止可以停止
线程2是正弦波
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {
SurfaceView surfaceView;
int width=0;
int height=0;
Button button1,button2;
SurfaceHolder surfaceHolder;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1=findViewById(R.id.start);
button2=findViewById(R.id.stop);
surfaceView=findViewById(R.id.surf);
surfaceHolder= surfaceView.getHolder();
surfaceHolder.addCallback(this);
width= this.getWindowManager().getDefaultDisplay().getWidth();
height= this.getWindowManager().getDefaultDisplay().getHeight();
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
flag=true;
synchronized (String.class){
String.class.notify();
}
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
flag=false;
}
});
}
//绘制基本图形
private void tot(){
// Paint paint=new Paint();
// paint.setColor(Color.RED);
// Canvas canvas = holder.lockCanvas();
// //画线
// canvas.drawLine(0,0,width,height,paint);
// //画圆
// canvas.drawOval(100,100,200,400,paint);
// //画矩形
// canvas.drawRect(300,300,400,400,paint);
// //画点
// canvas.drawPoint(500,500,paint);
// //画弧度
// canvas.drawArc(600,600,800,800,20,30,true,paint);
// holder.unlockCanvasAndPost(canvas);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void surfaceCreated(SurfaceHolder holder) {
new MyThread().start();
// new MyZXThread().start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
boolean flag =false;
int top = 0;
int bottom = 100;
int left = 0;
int right = 100;
int s = 20;
int x = 20;
int z = 20;
int y = 20;
class MyThread extends Thread{
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void run() {
super.run();
while(true){
if (flag==false){
synchronized (String.class){
try {
String.class.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
int a= (int) (Math.random()*255);
int b= (int) (Math.random()*255);
int c= (int) (Math.random()*255);
Paint paint=new Paint();
paint.setColor(Color.rgb(a,b,c));
paint.setStrokeWidth(10);
Canvas canvas = surfaceHolder.lockCanvas();
if (canvas==null){
break;
}
canvas.drawColor(Color.WHITE);
canvas.drawOval(left+=z,top+=s,right+=y,bottom+=x,paint);
canvas.drawOval(left+=z,top+=s,right+=y,bottom+=x,paint);
canvas.drawOval(left+=z,top+=s,right+=y,bottom+=x,paint);
canvas.drawOval(left+=z,top+=s,right+=y,bottom+=x,paint);
canvas.drawOval(left+=z,top+=s,right+=y,bottom+=x,paint);
canvas.drawOval(left+=z,top+=s,right+=y,bottom+=x,paint);
canvas.drawOval(left+=z,top+=s,right+=y,bottom+=x,paint);
canvas.drawOval(left+=z,top+=s,right+=y,bottom+=x,paint);
canvas.drawOval(left+=z,top+=s,right+=y,bottom+=x,paint);
if(right>=width){
z=-20;
y=-20;
}else if(bottom>=height){
s=-20;
x=-20;
}else if(top<=0){
s=20;
x=20;
}else if(left<=0){
z=20;
y=20;
}
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
int xx=0;
class MyZXThread extends Thread{
@Override
public void run() {
super.run();
while (true){
int a= (int) (Math.random()*255);
int b= (int) (Math.random()*255);
int c= (int) (Math.random()*255);
Paint paint=new Paint();
paint.setColor(Color.rgb(a,b,c));
paint.setStrokeWidth(10);
Canvas canvas = surfaceHolder.lockCanvas();
if (canvas==null){
break;
}
int y=(int)(100* Math.sin(xx*Math.PI/180)+400);
canvas.drawPoint(xx,y,paint);
xx++;
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
四个球分别往各自方向跑
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
String[] str = new String[]{"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "a", "b", "c", "d", "e", "f"};
ArrayList<Bean> list = new ArrayList<>();
int width;
int height;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView=findViewById(R.id.surf);
width= this.getWindowManager().getDefaultDisplay().getWidth();
height= this.getWindowManager().getDefaultDisplay().getHeight();
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
Bean bean = new Bean(height / 2 - 50, height / 2 + 50, width / 2 - 50, width / 2 + 50, 20,20,0);
list.add(bean);
Bean bean1 = new Bean(height / 2 - 50, height / 2 + 50, width / 2 - 50, width / 2 + 50,-20,20,1);
list.add(bean1);
Bean bean2 = new Bean(height / 2 - 50, height / 2 + 50, width / 2 - 50, width / 2 + 50,20,-20,2);
list.add(bean2);
Bean bean3 = new Bean(height / 2 - 50, height / 2 + 50, width / 2 - 50, width / 2 + 50,-20,-20,3);
list.add(bean3);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
new MyThread().start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
class MyThread extends Thread{
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void run() {
super.run();
while (true) {
Canvas canvas = surfaceHolder.lockCanvas();
if (canvas == null) {
break;
}
int a= (int) (Math.random()*255);
int b= (int) (Math.random()*255);
int c= (int) (Math.random()*255);
Paint paint=new Paint();
paint.setColor(Color.rgb(a,b,c));
paint.setStrokeWidth(10);
canvas.drawColor(Color.WHITE);
for (int i = 0; i < list.size(); i++) {
Bean bean = list.get(i);
if (bean.getY() >= width) {
bean.setLeft_righr(-10);
} else if (bean.getX() >= height) {
bean.setTop_bottom(-10);
} else if (bean.getS() <= 0) {
bean.setTop_bottom(10);
} else if (bean.getZ() <= 0) {
bean.setLeft_righr(10);
}
bean.setS(bean.getTop_bottom() + bean.getS());
bean.setX(bean.getTop_bottom() + bean.getX());
bean.setZ(bean.getLeft_righr() + bean.getZ());
bean.setY(bean.getLeft_righr() + bean.getY());
canvas.drawOval(bean.getZ(), bean.getS(), bean.getY(), bean.getX(), paint);
}
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
//Bean类
package com.example.day06_fourqiu;
public class Bean {
int s;
int x;
int z;
int y;
int left_righr;
int top_bottom;
int type;
public Bean(int s, int x, int z, int y, int left_righr, int top_bottom, int type) {
this.s = s;
this.x = x;
this.z = z;
this.y = y;
this.left_righr = left_righr;
this.top_bottom = top_bottom;
this.type = type;
}
@Override
public String toString() {
return "Bean{" +
"s=" + s +
", x=" + x +
", z=" + z +
", y=" + y +
", left_righr=" + left_righr +
", top_bottom=" + top_bottom +
", type=" + type +
'}';
}
public int getS() {
return s;
}
public void setS(int s) {
this.s = s;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getZ() {
return z;
}
public void setZ(int z) {
this.z = z;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getLeft_righr() {
return left_righr;
}
public void setLeft_righr(int left_righr) {
this.left_righr = left_righr;
}
public int getTop_bottom() {
return top_bottom;
}
public void setTop_bottom(int top_bottom) {
this.top_bottom = top_bottom;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
}