Android绘制线然后用触摸拖动它

时间:2016-06-03 16:50:59

标签: android canvas draw drag

我正在构建一个Android应用程序,该应用程序在画布上绘制线条图,显示在相机视图上。它的目的是绘制线条,提供在该边界捕获图像的轮廓。 enter image description here

我能够绘制这样的线条,用作边界以在其中拍摄照片。但我想要的是我无法拖动我绘制的线条或者我想在绘制后缩放线条。因为当前绘制线条时必须非常小心,并且需要稍微偏差。

那么有人可以帮助我如何在线实现拖动侦听器,如何创建行作为可以在线上触摸手指时听到的对象?

谢谢, 伊尔凡

@Override
public boolean onTouchEvent(MotionEvent event) {

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


            downx = event.getX();
            downy = event.getY();        

            fstTouch = downx;
            fstTouchx = downx;
            fstTouchY = downy;       
            break;

        case MotionEvent.ACTION_MOVE:

            break;

        case MotionEvent.ACTION_UP:
            upx = event.getX();
            upy = event.getY();

            if (actionE == 1) {
                actionE = 2;

                canvas.drawLine(downx, downy, upx, upy, Manage_Template.mPaint);
                invalidate();
                editor.putFloat("downx", fstTouchx);
                editor.putFloat("downy", fstTouchY);
                editor.putString("fst", "2");
                editor.putFloat("newDownx", upx);
                editor.putFloat("newDowny", upy);
                editor.commit();

            } 
              else {

                fDownx = sharedPreferences.getFloat("downx", 0);
                fDowny = sharedPreferences.getFloat("downy", 0);
                newDownx = sharedPreferences.getFloat("newDownx", 0);
                newDowny = sharedPreferences.getFloat("newDowny", 0);


                fstLate = fstTouch - fDownx; //85-100=15
                scndLate = fstTouch - newDownx;//120-100=30

                st = String.valueOf(fstLate);
                sl = String.valueOf(scndLate);
                st = st.replace("-", "");
                sl = sl.replace("-", "");
                fstLate = Float.parseFloat(st);
                scndLate = Float.parseFloat(sl);

                if (fstLate >= scndLate) {

                    canvas.drawLine(newDownx, newDowny, upx, upy, Manage_Template.mPaint);
                    editor.putFloat("newDownx", upx);
                    editor.putFloat("newDowny", upy);
                    editor.commit();
                    invalidate();
                    Log.d("Action UP","fstlate>");

                } else {
                    canvas.drawLine(fDownx, fDowny, upx, upy, Manage_Template.mPaint);
                    editor.putFloat("downx", upx);
                    editor.putFloat("downy", upy);
                    editor.putFloat("newDownx", newDownx);
                    editor.putFloat("newDowny", newDowny);
                    editor.commit();
                    invalidate();
                    Log.d("Action UP","scndlate");
                }
            }
            // }

            break;
    }
    return true;
}

1 个答案:

答案 0 :(得分:1)

我会使用onTouchListener来执行此操作。这是我在学习它时使用的一个例子:Using OnTouchListener

我认为您想要的主要内容是在每MotionEvent.ACTION_MOVE期间更新一行,然后在获得MotionEvent.ACTION_UP时将该行保留在原来的位置

希望这有帮助!

相关问题