如何在画布上使EditText可点击?

3

我希望能够在画布上点击后放置编辑文本。我想获取用户输入并将其设置为画布上的编辑文本。

以下是我的代码:

@Override
protected void onDraw(Canvas canvas) {


    for (Point point : points) {

        LinearLayout lL = new LinearLayout(getContext());

           EditText editTextView = new EditText(getContext()); 

           editTextView.setFocusableInTouchMode(true);
           editTextView.setFocusable(false);
           editTextView.setClickable(true);

           editTextView.setText("sadsdadadadadsadasds");
           editTextView.setVisibility(View.VISIBLE);
           lL.addView(editTextView);
           lL.setDrawingCacheEnabled(true);

            lL.measure(canvas.getWidth(), canvas.getHeight());
            lL.layout(0, 0, canvas.getWidth(), canvas.getHeight());

            canvas.drawBitmap(lL.getDrawingCache(),  point.x, point.y, mPaint);
     //   canvas.drawText("(0,0)", point.x, point.y, mPaint);




      //  Log.d(TAG, "Painting: "+point);
    }
}


@Override
public boolean onTouch(View v, MotionEvent event) {
    float x = event.getX();
    float y = event.getY();
    InputMethodManager inputMethodManager;
    TextView tv1=new TextView(getContext());
    LinearLayout lL = new LinearLayout(getContext());

    // return super.onTouchEvent(event);
    Point point = new Point();
    point.x = (int) event.getX();
    point.y = (int) event.getY();
    points.add(point);
    invalidate();
    return true;
}

错误:

问题在于EditText被放置在画布上,但无法点击。


它说空值在onTouch()方法的第148行。 - Ahmad Dwaik 'Warlock'
是的,我知道。我该怎么修复它? - Mohit
最好不要在触摸时创建新的对象,而是在xml中提供一个EditText并隐藏它,在onTouch事件中只需显示它et.setVisibility(View.VISIBLE) - Ahmad Dwaik 'Warlock'
我已经解决了这个问题,但是Editext无法点击... - Mohit
2个回答

0

首先不要在画布上绘制它,因为触摸事件仅应用于该画布,在您的Activity/xml中绘制编辑文本和自定义视图(画布),如果仍然无法点击,请尝试将编辑文本置于前面。

yourLayout.bringChildToFront(yourEditText);

你的 XML 应该长这样

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- your custom view here -->


    <!-- edittext here -->
    <EditText
        android:id="@+id/settings_text_y"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</RelativeLayout>

0

这段代码对我有效,请告诉我它是否有效:

final RelativeLayout mainLayout = new RelativeLayout(this);
mainLayout.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT,      LayoutParams.MATCH_PARENT));
setContentView(mainLayout);
mainLayout.setOnTouchListener(new View.OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() != MotionEvent.ACTION_DOWN) {
        return false;
    }

    EditText editText = new EditText(YourActivity.this);

    // Add whatever you want as size
    int editTextHeight = 70;
    int editTextWidth = 200;

    LayoutParams params = new LayoutParams(editTextWidth, editTextHeight);

    //You could adjust the position
    params.topMargin = (int) (event.getRawY());
    params.leftMargin = (int) (event.getRawX());
    mainLayout.addView(editText, params);
    editText.requestFocus();

    return false;
   }
 });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接