Android在路径对象上实现onTouchListener [英] Android Implement onTouchListener on path objects

查看:95
本文介绍了Android在路径对象上实现onTouchListener的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个如下所示的路径对象,该对象绘制了不同的形状.不同的按钮响应在画布上绘制不同的形状.我想移动在画布中创建的路径对象,但不知道如何.

I have created a path objects as shown below which draws a different shapes.Different buttons response to drawing different shapes on the canvas. I would like to shift the path objects that i have created in the canvas but I do not know how to.

我只知道在位图而非路径对象上实现ontouchlistener的方法.

I only know the method of implementing ontouchlistener on a bitmap and not on path objects.

我的代码如下:

ArrayList<Path> paths = new ArrayList<Path>();
        @Override
        protected void onDraw(Canvas canvas) {
            // TODO Auto-generated method stub
            super.onDraw(canvas);

                paintColor.setColor(Color.RED);
                paintColor.setStrokeWidth(2);
                paintColor.setStyle(Paint.Style.STROKE);


    if (MainActivity.isRectangle) {

                Path path = new Path();
                path.moveTo(1, 1);
                path.lineTo(90, 1);
                path.lineTo(90, 60);
                path.lineTo(1, 60);

                path.close();



               paths.add(path);

            }

 for (Path p : paths) {
            canvas.drawPath(p, paintColor );
        }


     canvas.drawPath(path, paintColor);
     invalidate();


    }

//mainActivity
rectbutton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                // TODO Auto-generated method stub
                isTriangle = false;
                isRectangle = true;
                isCircle= false;
                isParallelogram = false;
                isTapezium = false;


                dv.invalidate();


            }// onclick

        });

onTouchEvent

onTouchEvent

@Override
public boolean onTouch(View v,MotionEvent event){

    switch(event.getAction()){
    case MotionEvent.ACTION_DOWN:

                //screen touch get x of the touch event
                x = event.getX();
                //screen touch get y of the touch event
                y =event.getY();
              for (Path p : paths) {

            path.moveTo(x,y);
            }

        dv.invalidate();


        break;

    case MotionEvent.ACTION_UP:
        //screen touch get x of the touch event
        x = event.getX();
        //screen touch get y of the touch event
        y =event.getY();
    break;

    case MotionEvent.ACTION_MOVE:
        //screen touch get x of the touch event
        x = event.getX();
        //screen touch get y of the touch event
        y =event.getY();
        break;
    }

    return true;

}

请咨询.谢谢.

推荐答案

路径对象上没有onTouchListener.但是,请按照以下步骤实现此功能

There is no onTouchListener on path object.However, Follow the steps to achive this functionality

1.)重写onTouchEvent()方法以查找您触摸过的坐标.该链接可能会有所帮助. http://developer.android.com/training/graphics/opengl/touch. html

1.) override onTouchEvent() method to Find the coordinates you have touched. This link may help. http://developer.android.com/training/graphics/opengl/touch.html

2.)创建一个RectF boundsRect,并使用

2.) create a RectF boundsRect and for each path object store its boundary coordinates by using

Path.getBounds(boundsRect);     

在上述方法中,同时循环检查触摸坐标是否位于rectF boundsRect(使用bounds.contains(x,y))中.

method and simultaneously check whether the touch coordinates lie in the rectF boundsRect(using bounds.contains(x,y)) in a loop in the above method.

3.)选择该路径并立即对其进行所需的操作.

3.)select that path and do desired operation on it now.

修改后的代码

@Override
public boolean onTouch(View v,MotionEvent event){

    switch(event.getAction()){
        case MotionEvent.ACTION_DOWN:

            //screen touch get x of the touch event
            x = event.getX();
            //screen touch get y of the touch event
            y = event.getY();

            //check if touch point intersects the path bounds
            for (Path p : paths) {
                RectF pBounds = new RectF();
                p.computeBounds(pBounds,true);
                if(pBounds.contains(x,y)){
                //select path
                selected Path = p;// where selectedPath is assumed declared.
                break;
            }

        dv.invalidate();    
        break;

        case MotionEvent.ACTION_UP:
            //screen touch get x of the touch event
            x = event.getX();
            //screen touch get y of the touch event
            y = event.getY();
            break;

        case MotionEvent.ACTION_MOVE:
            //screen touch get x of the touch event
            x = event.getX();
            //screen touch get y of the touch event
            y = event.getY();
            break;
        }
    }
    return true;
}

这篇关于Android在路径对象上实现onTouchListener的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆