当前位置: 源码素材网 » Android教程 » 详情页

Android 屏幕矫正小游戏:抓不到我代码解析

  •   时间:2019-07-09
  • 概述:屏幕矫正

本文介绍一款Android手机屏幕矫正的小游戏编写方法——抓不到我,在编写时主要通过Canvas类中的drawCincle()方法、View类中的invalidate()方法来实现,下面介绍具体的过程及代码:

创建 DrawCircle类,让其继承View类,在重写的onDraw()方法中绘图,关键代码如下:

Paint paint;
private float x=300,y=300,ox,oy;
public DrawCircle(Context context) {
    super(context);
}
public DrawCircle(Context context, AttributeSet attrs) {
    super(context, attrs);
}
@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    paint = new Paint();   //初始化画笔
    paint.setColor(Color.RED);// 设置红色
    paint.setAntiAlias(true);// 设置画笔的锯齿效果。 true是去除,大家一看效果就明白了
    canvas.drawCircle(x, y, 80, paint);  // 大圆
    Bitmap bitmap=null;//Bitmap对象
    ox = x;
    oy = y;
}

在DrawCircle类中添加一个setXYQ方法,此方法是用来接收MamActivity传过来的坐标点 并且重新绘制圆。关键代码如下:

/**
 *此方法用于接收MainActivity传递过来的坐标点
 * */
public void setXY(float x,float y){
    this.x = x;
    this.y = y;
    invalidate();
}

在MainActivity的手势判断的方法中判断手指单击的点是否己单击到圆内,如果单击到圆内,便在其他的位置重新绘制一个圆,关键代码如下:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //全屏
    getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , WindowManager.LayoutParams. FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);
    WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
    w = wm.getDefaultDisplay().getWidth();  //获取屏幕的宽
    h = wm.getDefaultDisplay().getHeight();  //获取屏幕的高
    layout = (RelativeLayout) findViewById(R.id.root);
    drawCircle = new DrawCircle(this);  //初始化画布
    drawCircle.setMinimumHeight(h);      //设置画布的高
    drawCircle.setMinimumWidth(w);      //设置画布的宽
    //通知view组件重绘
    drawCircle.invalidate();
    drawCircle.setBackgroundResource(R.mipmap.background);
    layout.addView(drawCircle);   //将画布添加到布局里
}
@Override
public boolean onTouchEvent(MotionEvent event) {
    if (MotionEvent.ACTION_DOWN == event.getAction()) {
        float x = event.getX();
        float y = event.getY();
        //判断点的是不是圆内
        if ((drawCircle.getOldValues()[0] + 80 > x && x > drawCircle.getOldValues()[0] - 80)
                && (drawCircle.getOldValues()[1] + 80 > y && y > drawCircle.getOldValues()[1] - 80)) {
            //判断随机生成的坐标在不在当前圆内
            Random random = new Random();
            int sendX, sendY;
            do {
                sendX = random.nextInt(w - 80);
                sendY = random.nextInt(h - 80);
            } while ((sendX < 80 && sendY < 200)&& (drawCircle.getOldValues()[1] + 80 > sendY && sendY > drawCircle.getOldValues()[1] - 80));
            drawCircle.setXY(sendX, sendY);  //根据X与Y的值花圆
        }
    }
    return super.onTouchEvent(event);
}

    相关声明:

      若“Android 屏幕矫正小游戏:抓不到我代码解析”有损您的权益,请告之我们删除内容。
      部分文章来源于网络,版权归原作者所有。