请问我如何把edittext的文字通过onDraw放在画板上 10C

我想做一个画板,现在想实现插入文字功能,目前点击屏幕时能弹出popupwindow,然后可以编辑EditText,请问如果在点击其他地方的时候让文字留在画板上

这是showTextPopup方法部分

     public void showTextPopup(float preX,float preY){
        int x = (int) preX;
        int y = (int) preY;
        dp = new DrawPath();
        dp.mOffX = preX;
        dp.mOffY = preY;
        dp.paint = mpaint;
        EditText mEditText = new EditText(getContext());
        mEditText.setText("输入文字");
        PopupWindow mTextPopup = new PopupWindow(mEditText, WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.WRAP_CONTENT,true);
        mEditText.setFocusable(true);
        mEditText.setFocusableInTouchMode(true);
        //让popup显示在软键盘上面
        mTextPopup.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
        mEditText.requestFocus();
        mTextPopup.setOutsideTouchable(true);
        mTextPopup.setBackgroundDrawable(new BitmapDrawable());
        //自动弹出软键盘,会导致布局变化,重测量、绘制
        InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Service.INPUT_METHOD_SERVICE);
        imm.toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);
        mTextPopup.showAtLocation(this, Gravity.TOP | Gravity.LEFT, x, y);
        invalidate();

    }

这是DrawPath类

     static class DrawPath{
        public Path path;//路径
        public Paint paint;//画笔

        public Editable mText;//文本
        //public int mWidth;//宽度
        public float mOffX;//X轴偏移
        public float mOffY;//Y轴偏移
    }

点击事件

     public boolean onTouchEvent(MotionEvent event){
        //获取拖动事件的发生位置
        float x = event.getX();
        float y = event.getY();
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                //从前一个点绘制到当前点之后,把当前点定义成下次绘制的一个点
                if(currentStyle==3){
                    showTextPopup(x,y);
                }
                mpath = new Path();
                //每一次记录的路径对象是不一样的
                dp = new DrawPath();
                dp.path = mpath;
                dp.paint = mpaint;
                mpath.moveTo(x,y);
                preX = x;
                preY = y;
                invalidate();
                break;
            case MotionEvent.ACTION_MOVE:
                mpath.quadTo(preX,preY,x,y);
                preX = x;
                preY = y;
                break;
            case MotionEvent.ACTION_UP:
                mpath.lineTo(preX,preY);
                cachecanvas.drawPath(mpath,mpaint);
                //将一条完整的路径保存下来
                savePath.add(dp);
                mpath = null;//重新置空
                break;
        }
        invalidate();
        //返回true表明处理方法已经处理该事件
        return true;
    }

onDraw方法

     public void onDraw(Canvas canvas){
        //Paint bmpPaint = new Paint();
        //将cacheBitmap绘制到该View组件上
        canvas.drawBitmap(cacheBitmap,0,0,mBitmapPaint);//显示旧的画布
        //沿着path绘制
        if(mpath != null) {
            canvas.drawPath(mpath, mpaint);
        }
    }

4个回答

用drawText()可以实现
canvas.drawText()

https://blog.csdn.net/harvic880925/article/details/50423762

先获取到edittext的内容,然后在把文字画上去就行了

可以在你的自定义view里暴露一个方法,该方法用来绘制文字,在edittext消失的时候,获取内容,然后将文字画上去

sinat_32247289
ogiso雪菜 我获取了内容,但是显示不出来,用canvas.drawtext不行 用StaticLayout 也不行
一年多之前 回复

重写canvas的onDraw方法 把edittext.getText()的值放进去

sinat_32247289
ogiso雪菜 我重写了方法,但是用canvas.drawtext显示不出来
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!