Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package rnd.tetrisandbnw;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.graphics.Path;
- import android.graphics.Point;
- import android.util.Log;
- import android.view.MotionEvent;
- import android.view.View;
- import java.util.LinkedList;
- /**
- * Created by ioth1nkn0t on 27-4-17.
- */
- public class BnwView extends View {
- private Path drawPath;
- private Paint drawPaint, canvasPaint;
- private int screenWidth;
- private float middle;
- private float pointCoords[];
- private Canvas drawCanvas;
- private float widthOff;
- private Bitmap canvasBitmap, oldBitmap;
- private LinkedList<Point> points;
- private LinkedList<Point> solution;
- private boolean toRemove = false;
- public BnwView(Context context) {
- super(context);
- setUpDrawing();
- }
- private void setUpDrawing() {
- drawPath = new Path();
- drawPaint = new Paint();
- drawPaint.setColor(Color.YELLOW);
- drawPaint.setStrokeWidth(20);
- drawPaint.setStyle(Paint.Style.STROKE);
- pointCoords = new float[5];
- points = new LinkedList<>();
- }
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- float touchX = event.getX();
- float touchY = event.getY();
- switch (event.getAction()) {
- case MotionEvent.ACTION_DOWN:
- int i, j;
- for(i=0; i<5; i++)
- for (j = 0; j < 5; j++)
- if (Math.abs(touchX - pointCoords[i]) < 30 && Math.abs(touchY - pointCoords[j]) < 30 &&
- (pointCoords[i] - points.getLast().x) == 0 && (pointCoords[j] - points.getLast().y) == 0) {
- if(points.size()>1)
- drawPath.moveTo(pointCoords[i], pointCoords[j]);
- invalidate();
- return true;
- }
- if(touchX < (middle+300) && touchX > (middle-300) && touchY > (screenWidth+80) && touchY < (screenWidth+240)) {
- canvasBitmap = oldBitmap.copy(Bitmap.Config.ARGB_8888,true);
- drawPath.reset();
- toRemove = true;
- break;
- }
- case MotionEvent.ACTION_MOVE:
- int k, l;
- for(k=0; k<5; k++) {
- for (l = 0; l < 5; l++) {
- if (Math.abs(touchX - pointCoords[k]) < 30 && Math.abs(touchY - pointCoords[l]) < 30) {
- if ((pointCoords[k] - points.getLast().x) == 0 && !(pointCoords[l] - points.getLast().y == 0)) {
- if (pointCoords[l] < points.getLast().y) {
- Point np = new Point(Math.round(pointCoords[k]), Math.round(points.getLast().y - widthOff));
- if (points.isEmpty() || !points.contains(np)) {
- drawPath.lineTo(pointCoords[k], points.getLast().y - widthOff);
- points.add(np);
- invalidate();
- return true;
- }
- }
- else if (pointCoords[l] > points.getLast().y) {
- Point np = new Point(Math.round(pointCoords[k]), Math.round(points.getLast().y + widthOff));
- if (points.isEmpty() || !points.contains(np)) {
- drawPath.lineTo(pointCoords[k], points.getLast().y + widthOff);
- points.add(np);
- invalidate();
- return true;
- }
- }
- }
- else if (!(pointCoords[k] - points.getLast().x == 0) && (pointCoords[l] - points.getLast().y == 0)) {
- if (pointCoords[k] < points.getLast().x) {
- Point np = new Point(Math.round(points.getLast().x - widthOff), Math.round(pointCoords[l]));
- if (points.isEmpty() || !points.contains(np)) {
- drawPath.lineTo(points.getLast().x - widthOff, pointCoords[l]);
- points.add(np);
- invalidate();
- return true;
- }
- }
- else if (pointCoords[k] > points.getLast().x) {
- Point np = new Point(Math.round(points.getLast().x + widthOff), Math.round(pointCoords[l]));
- if (points.isEmpty() || !points.contains(np)) {
- drawPath.lineTo(points.getLast().x + widthOff, pointCoords[l]);
- points.add(np);
- invalidate();
- return true;
- }
- }
- }
- }
- }
- }
- break;
- case MotionEvent.ACTION_UP:
- if(solution.equals(points)) {
- drawCanvas.drawCircle(screenWidth/2,screenWidth/2,300,canvasPaint);
- }
- for(Point pt: points) {
- Log.d("points ",pt.toString());
- }
- Log.d("----","----------------------");
- for(Point pt: solution) {
- Log.d("soluti ",pt.toString());
- }
- if(toRemove) {
- points.clear();
- points.addLast(new Point(Math.round(pointCoords[0]),Math.round(pointCoords[4])));
- drawPath.moveTo(pointCoords[0],pointCoords[4]);
- toRemove = false;
- break;
- }
- drawCanvas.drawPath(drawPath,drawPaint);
- break;
- default:
- return false;
- }
- invalidate();
- return true;
- }
- @Override
- public void onDraw(Canvas canvas) {
- canvas.drawBitmap(canvasBitmap,0,0,canvasPaint);
- canvas.drawPath(drawPath,drawPaint);
- }
- private void setCanvasPaint(Paint canvasPaint) {
- canvasPaint.setColor(Color.BLACK);
- canvasPaint.setStrokeWidth(20);
- canvasPaint.setColor(Color.DKGRAY);
- canvasPaint.setStyle(Paint.Style.STROKE);
- }
- private void drawButton(Canvas drawCanvas) {
- middle = screenWidth / 2;
- Paint buttonPaint = new Paint();
- buttonPaint.setColor(Color.DKGRAY);
- buttonPaint.setStyle(Paint.Style.FILL);
- drawCanvas.drawRect(middle-300,screenWidth+80,middle+300,screenWidth+240,buttonPaint);
- buttonPaint.setTextSize(100);
- buttonPaint.setColor(Color.WHITE);
- drawCanvas.drawText("CLEAR",middle-160,screenWidth+180,buttonPaint);
- }
- private void setDrawGrid(Canvas drawCanvas) {
- drawCanvas.drawLine(80,80,screenWidth-80,80,canvasPaint);
- drawCanvas.drawLine(screenWidth-80,80,screenWidth-80,screenWidth-80,canvasPaint);
- drawCanvas.drawLine(screenWidth-80,screenWidth-80,80,screenWidth-80,canvasPaint);
- drawCanvas.drawLine(80,screenWidth-80,80,80,canvasPaint);
- canvasPaint.setStyle(Paint.Style.FILL);
- drawCanvas.drawCircle(88,screenWidth-88,12,canvasPaint);
- canvasPaint.setStyle(Paint.Style.STROKE);
- widthOff = ((screenWidth-160) / 4);
- float widthCurr = 80;
- int i;
- for(i=0;i<5;i++) {
- drawCanvas.drawLine(widthCurr,80,widthCurr,screenWidth-80,canvasPaint);
- drawCanvas.drawLine(80,widthCurr,screenWidth-80,widthCurr,canvasPaint);
- Log.d("Current offset","widthCurr = " + widthCurr);
- pointCoords[i] = widthCurr;
- widthCurr += widthOff;
- }
- drawPath.moveTo(pointCoords[0],pointCoords[4]);
- points.addLast(new Point(Math.round(pointCoords[0]),Math.round(pointCoords[4])));
- drawButton(drawCanvas);
- }
- private void setUpLevel() {
- solution = new LinkedList<>();
- int i, j;
- for(i = 0; i<3; i++) {
- solution.addLast( new Point( Math.round( pointCoords[i] ), Math.round( pointCoords[4] ) ) );
- Log.d("x y coords", "x = " + pointCoords[i] + " y = " + pointCoords[4]);
- }
- for(j = 4; j>3; j--) {
- solution.addLast( new Point( Math.round( pointCoords[i] ), Math.round( pointCoords[j] ) ) );
- Log.d("x y coords", "x = " + pointCoords[i] + " y = " + pointCoords[j]);
- }
- for(;i>=1;i--) {
- solution.addLast( new Point( Math.round( pointCoords[i] ), Math.round( pointCoords[j] ) ) );
- Log.d("x y coords", "x = " + pointCoords[i] + " y = " + pointCoords[j]);
- }
- solution.addLast( new Point( Math.round( pointCoords[i] ), Math.round( pointCoords[j--] ) ) );
- Log.d("x y coords", "x = " + pointCoords[i] + " y = " + pointCoords[j+1]);
- solution.addLast( new Point( Math.round( pointCoords[i] ), Math.round( pointCoords[j] ) ) );
- Log.d("x y coords", "x = " + pointCoords[i] + " y = " + pointCoords[j]);
- }
- @Override
- protected void onSizeChanged(int w, int h, int oldw, int oldh) {
- super.onSizeChanged(w,h,oldw,oldh);
- screenWidth = w;
- canvasBitmap = Bitmap.createBitmap(w,w+300,Bitmap.Config.ARGB_8888);
- canvasPaint = new Paint();
- drawCanvas = new Canvas(canvasBitmap);
- canvasPaint.setStyle(Paint.Style.FILL);
- canvasPaint.setColor(Color.GRAY);
- drawCanvas.drawRect(0,0,screenWidth,screenWidth,canvasPaint);
- setCanvasPaint(canvasPaint);
- setDrawGrid(drawCanvas);
- oldBitmap = canvasBitmap.copy(Bitmap.Config.ARGB_8888,true);
- setUpLevel();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement