package com.example.administrator.surfaceviewtest;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
Paint paint;
SurfaceHolder holder;
SurfaceView view1;
final int WIDTH = 500, HEIGHT = 500, X_OFFSET = 150;
int cx = X_OFFSET;
int centerY= HEIGHT/2;
Timer timer = new Timer();
TimerTask timertask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main1);
view1 = (SurfaceView)findViewById(R.id.surfaceview1);
holder = view1.getHolder();
paint = new Paint();
paint.setColor(Color.GREEN);
paint.setStrokeWidth(3);
Button btn1 = (Button)findViewById(R.id.btn1);
Button btn2 = (Button)findViewById(R.id.btn2);
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(final View v) {
drawBack(holder);
cx = X_OFFSET;
if (timertask != null)
timertask.cancel();
timertask = new TimerTask() {
@Override
public void run() {
int cy = v.getId() == R.id.btn1?centerY-(int)(100*Math.sin((cx-5)*2*Math.PI/150)):
centerY-(int)(100*Math.cos((cx - 5) * 2 * Math.PI / 150));
Canvas canvas = holder.lockCanvas(new Rect(cx,cy-2,cx+2,cy+2));
canvas.drawPoint(cx,cy,paint);
Log.i(TAG, "x,y:" + cx + "," + cy);
cx++;
if (cx>WIDTH)
{
timertask.cancel();
timertask = null;
}
holder.unlockCanvasAndPost(canvas);
}
};
timer.schedule(timertask,0,20);
}
};
btn1.setOnClickListener(listener);
btn2.setOnClickListener(listener);
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
Log.i(TAG, "surfaceCreated~~~");
drawBack(holder);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
timertask.cancel();
}
});
}
private void drawBack(SurfaceHolder holder)
{
Canvas canvas = holder.lockCanvas();
canvas.drawColor(Color.WHITE);
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setStrokeWidth(3);
canvas.drawLine(X_OFFSET, centerY, WIDTH, centerY, paint);
canvas.drawLine(X_OFFSET, 140, X_OFFSET, HEIGHT, paint);
holder.unlockCanvasAndPost(canvas);
holder.lockCanvas(new Rect(0,0,0,0));
holder.unlockCanvasAndPost(canvas);
}
}