package com.example.hsy.test4surfaceviewcircleanimation;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.graphics.RectF;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import java.util.Arrays;
public class MainActivity extends AppCompatActivity {
private SurfaceView surface;
private SurfaceHolder holder;
boolean stop = false;
private int radiusArray[] = {0, 0};
private static int baseRadius = 50;
private static int maxRadius = 200;
private static int baseSpeed = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// surface = (SurfaceView) findViewById(R.id.circle_surface);
//
// new Thread(new Runnable() {
// @Override
// public void run() {
// while (!stop) {
// holder = surface.getHolder();
// if (!holder.getSurface().isValid()) {
// continue;
// }
//
// Canvas canvas = null;
// try {
// canvas = holder.lockCanvas();
// synchronized (holder) {
// if (canvas != null) {
// draw(canvas);
// }
// }
// } catch (Exception e) {
// } finally {
// if (canvas != null) {
// holder.unlockCanvasAndPost(canvas);
// }
// }
//
// try {
// Thread.sleep(0);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
//
// }
// }
// }).start();
}
@Override
protected void onDestroy() {
stop = true;
super.onDestroy();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
private void draw(Canvas canvas) {
updateRadius();
drawCircles(canvas);
}
private void updateRadius() {
for (int i = 0; i < radiusArray.length; i++) {
if (radiusArray[i] >= maxRadius - 1) {
radiusArray[i] = baseRadius;
} else {
radiusArray[i] += baseSpeed;
}
}
Arrays.sort(radiusArray);
}
private void drawCircles(Canvas canvas) {
canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG
| Paint.FILTER_BITMAP_FLAG));
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(0xffffffff);
RectF r = new RectF(0, 0, canvas.getWidth(), canvas.getHeight());
canvas.drawRect(r, paint);
for (int i = radiusArray.length - 1; i >= 0; i--) {
if (radiusArray[i] >= baseRadius) {
paint.setColor(getColor(radiusArray[i]));
canvas.drawCircle(canvas.getWidth() / 2,
canvas.getHeight() / 2, radiusArray[i], paint);
}
}
paint.setColor(Color.argb(255, 0xfe, 0xaa, 0x4b));
canvas.drawCircle(canvas.getWidth() / 2, canvas.getHeight() / 2,
baseRadius, paint);
}
private int getColor(int radius) {
int total = maxRadius - baseRadius;
float ratio = (radius - baseRadius) * 1.0f / total;
if (ratio < 0) {
ratio = 0;
}
int alpha = (int) ((1.0f - ratio) * 255);
return Color.argb(alpha, 0xfd, 0xdb, 0xb6);
}
}