onTouchEvent()上的drawLine()(android)

时间:2014-04-01 06:14:14

标签: android android-canvas ontouchevent

我正在尝试在Android中制作游戏。我画了一个包含圆圈网格(5 * 6)的棋盘。我正在使用画布,当用户在水平或垂直方向上触摸两个圆圈时,我想绘制线条。每当触摸事件发生时,它应该采用两个圆圈的x,y坐标和它们之间的drawLine()。我试过这个,但我面临两个问题,如下所述。

  • 当我运行此代码时,它会在设备的左上角显示一行 屏幕。问题是它在没有触摸屏的情况下显示行。
  • 第二个问题是它应该在圆圈和它之间显示线条 不应该允许选择区域以外的其他线。

这是代码。请建议我解决。

package com.example.tap;

import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.gesture.Gesture;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.Log;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new board(this));
    }

    public class board extends View
    {
        Paint pBack = new Paint();
        Paint pDot  = new Paint();
        int xpos=0;
        int ypos=0;

        int cols = 5;
        int rows = 6;

        public board(Context context)
        {
            super(context);
            pBack.setARGB(255, 15, 102, 0);
            pDot.setARGB(255, 255, 255, 255);
        }

        @SuppressLint("DrawAllocation")
        protected void onDraw(Canvas canvas)
        {
            super.onDraw(canvas);
            canvas.drawPaint(pBack);
            float xStep = canvas.getWidth() / (cols + 1);
            float yStep = canvas.getHeight() / (rows + 1);
            float curCirclXpos, curCirclYpos, lastCirclXpos = 0, lastCirclYpos =0;
            //float vertical= 
//          boolean onTap(Gesture g, Point p)
//          {
//              
//          }

            for (int y = 0; y < rows; y++)
            {
                for (int x = 0; x < cols; x++)
                {
                    canvas.drawCircle((x + 1) * xStep, (y + 1) * yStep, 20, pDot);
                    curCirclXpos=x;
                    curCirclYpos=y;

                    if (y == 0)
                    {
                        //canvas.drawLine((x + 1) * xStep, yStep, (x + 1) * xStep, rows * yStep, pDot);
                        //canvas.drawLine(xpos, ypos, xpos, yStep, pDot);
                        canvas.drawLine(curCirclXpos, curCirclYpos, lastCirclXpos, lastCirclYpos, pDot);
                    }                   
                }

                //canvas.drawLine(xStep, (y + 1) * yStep, cols * xStep, (y + 1) * yStep, pDot);
            }
        }
        public boolean onTouchEvent(MotionEvent e)
        {
            xpos=(int) e.getX();
           ypos=(int) e.getY();
            switch (e.getAction())
            {
            case MotionEvent.ACTION_DOWN:
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_MOVE:
                //Log.d("Umar",String.valueOf(xpos));
                //Log.d("Farooq",String.valueOf(ypos));

            break;

            }
            return false;


        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


}

0 个答案:

没有答案