如何添加触摸指针以放置



我正在开发简单的图形应用程序,我想知道在触摸帆布时是否可以添加可见的指针?我的意思是类似于PC上的鼠标指示器。这样做的原因是 - 当使用橡皮擦时,当您的触摸确切注册到触摸时不可见,并且使用指针会有所帮助(尤其是在使用指示时,因为笔非常精确)。我尝试了其他类似的主题,但没有一个回答这个问题。

从此pos中获取: 如何通过编程启用"显示触摸"选项Android?

•启用显示触摸:

Settings.System.putInt(context.getContentResolver(),
            "show_touches", 1);

•禁用显示触摸:

Settings.System.putInt(context.getContentResolver(),
            "show_touches", 0);

记住将Android.permission.write_settings添加到您的清单中。

编辑:

这是一个实现View.OntouchListener并定义多个绘制模式的drawview.java。但是它缺少指标。

在setListener内部的主要活动中,用于绘图视图您覆盖onstartDrawing方法:在这里您可以决定是否显示指示器以及如何根据DrawView的当前模式(Pen,Eraser等)以及其他接口方法移动来样式指示器如果可见,并在绘图结束时将其隐藏。检查代码:

            mDrawView.setOnDrawViewListener(new DrawView.OnDrawViewListener() {
                @Override public void onStartDrawing() {
                    canUndoRedo();
                    // decide whether or not to show an
                    // indicator and style it depending on
                    // mDrawView's attributes and current drawing mode
                    setIndicator(mDrawView.getDrawingMode(),mDrawView.getDrawWidth());
                }
                @Override
                public void onMove(MotionEvent motionEvent) {
                    if(isIndicatorVisible){
                        indicatorView.animate()
                                .x(motionEvent.getX())
                                .y(motionEvent.getY())
                                .setDuration(0)
                                .start();
                    }
                }
                @Override public void onEndDrawing() {
                    canUndoRedo();
                    //hide indicator here
                    if (isIndicatorVisible){
                        indicatorView.setVisibility(View.GONE);
                        isIndicatorVisible = false;
                    }
                }

这是我添加到drawview.java的编辑:

定义的新接口方法无效(MotionEvent MotionEvent)

  public interface OnDrawViewListener {
        void onStartDrawing();
        void onEndDrawing();
        void onClearDrawing();
        void onRequestText();
        void onMove(MotionEvent motionEvent); // added this method
    }

称为内部的新方法:

    case MotionEvent.ACTION_MOVE:
                onDrawViewListener.onMove(motionEvent); // added this line
                mDrawMoveHistory.get(mDrawMoveHistory.size() - 1).setEndX(motionEvent.getX()).setEndY(motionEvent.getY());
                if (mDrawingTool == DrawingTool.PEN || mDrawingMode == DrawingMode.ERASER) {
                    mDrawMoveHistory.get(mDrawMoveHistory.size() - 1).getDrawingPathList()
                            .get(mDrawMoveHistory.get(mDrawMoveHistory.size() - 1).getDrawingPathList().size() - 1)
                            .lineTo(motionEvent.getX(), motionEvent.getY());
                }
                invalidate();
                break;

以下是setIndicator方法:

    private void setIndicator(DrawingMode drawingMode, int drawWidth) {
        if (drawingMode == DrawingMode.ERASER){
            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(drawWidth, drawWidth);
            indicatorView.setLayoutParams(params);
            GradientDrawable border = new GradientDrawable();
            border.setStroke(1, 0xFF000000); //black border with full opacity
            if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
                indicatorView.setBackgroundDrawable(border);
            } else {
                indicatorView.setBackground(border);
            }
            indicatorView.setVisibility(View.VISIBLE);
            isIndicatorVisible = true;
        }
    }

最新更新