2014-02-16 78 views
1

我想將編輯文本放在畫布上。 我想從用戶那裏獲得輸入並將該編輯文本設置爲畫布。如何讓EditText在畫布上點擊?

這裏是我的代碼:

@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上越來越放置在畫布上,但不clickble

+0

它說null是在方法onTouch線148() –

+0

是啊,我know..how解決呢? – Mohit

+0

更好,如果你不創建新的觸摸,在您的XML提供一個edittext並隱藏它,並ontouch只顯示它'et.setVisibility(View.VISIBLE)' –

回答

0

首先不要畫在帆布上,因爲只有應用觸摸在你的Activity/xml中繪製編輯文本和自定義視圖(canvas),如果仍然不可點擊,請嘗試將編輯文本置於前面

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; 
    } 
});