package com.lixinyang.myviewtest.Views; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.widget.Toast; import java.util.ArrayList; import java.util.List; /** * author:Created by WangZhiQiang on 2017/12/27. */ public class Checkerboard extends View { private Paint paint; private WindowManager wm; private int width; private int height; private boolean cb=false; private int x; private int y; private List<Integer> listx; private List<Integer> listy; private Paint paint2; int qq=0; int ww=0; public Checkerboard(Context context) { this(context,null); } public Checkerboard(Context context, @Nullable AttributeSet attrs) { this(context, attrs,0); } public Checkerboard(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setColor(Color.BLACK); paint.setStrokeWidth(3); paint2 = new Paint(Paint.ANTI_ALIAS_FLAG); paint2.setColor(Color.WHITE); paint2.setStrokeWidth(3); wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); width = wm.getDefaultDisplay().getWidth(); height = wm.getDefaultDisplay().getHeight(); listx = new ArrayList<Integer>(); listy = new ArrayList<Integer>(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int dot=0; while(dot<=width){ canvas.drawLine(dot,0,dot,height,paint); dot+=60; } int dot2 = 0; while(dot2<=height-100){ canvas.drawLine(0,dot2,height,dot2,paint); dot2+=60; } if(listx.size()!=0&&listy.size()!=0){ for (int i=0;i<listx.size();i++){ if(i%2==0) { canvas.drawCircle(listx.get(i), listy.get(i) - 100 - 80, 20, paint); }else{ canvas.drawCircle(listx.get(i), listy.get(i) - 100 - 80, 20, paint2); } } } for (int i=0;i<listx.size();i++){ for (int j=0;j<listy.size();j++){ if(ww==0) { if (listx.get(i) + 60 == listx.get(j)) { Log.d("TAG", "onDraw: "+listx.get(i)+"====="+listx.get(j)); if((listy.get(i)+60)==listy.get(j)) { ww = listx.get(i) + 60; qq++; } } }else{ if(ww+60==listx.get(i)){ if((listy.get(i)+60)==listy.get(j)) { ww = ww + 60; qq++; } } } } } if(qq==4){ Toast.makeText(getContext(),"恭喜你赢了",Toast.LENGTH_SHORT).show(); } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, widthMeasureSpec); } @Override public boolean onTouchEvent(MotionEvent event) { switch(event.getAction()){ case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: x = (int) event.getRawX(); y = (int) event.getRawY(); if(x%60<30){ x=x-x%60; }else{ x=x+(60-x%60); } if(y%60<30){ y=y-y%60; }else{ y=y+(60-y%60); } if(listx.size()==0&&listy.size()==0){ listx.add(x); listy.add(y); }else { for (int i = 0; i < listx.size(); i++) { if (listx.get(i) == x && listy.get(i) == y) { cb=true; } } if(cb!=true){ listx.add(x); listy.add(y); cb =false; }else{ cb=false; } } break; } //invalidate(); invalidate(); return true; } public void aa(){ listx.clear(); listy.clear(); invalidate(); qq=0; ww=0; } }
MainActivity
package com.lixinyang.myviewtest; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import com.lixinyang.myviewtest.Views.Checkerboard; public class MainActivity extends AppCompatActivity { private Checkerboard ck; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn = (Button) findViewById(R.id.btn); ck = (Checkerboard) findViewById(R.id.ck); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ck.aa(); } }); } }