1

タッチで移動し、ダブルタップまたは長押しでキーボードが開く編集テキストを作成しました。それは非常にうまく機能していますが、私は2つの問題に直面しています:

  1. EditText は、テキストの最後またはテキストの先頭から編集可能です。カーソルの位置が選べません。

  2. 編集テキストは、中央ではなく左隅からドラッグ アンド ドロップされます。

タッチリスナーのコードは次のとおりです。

@Override
public boolean onTouchEvent(MotionEvent event)
{

    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) v.getLayoutParams();
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            setEnabled(true);
            setCursorVisible(true);

            break;

        case MotionEvent.ACTION_UP:
            Log.d("up", "ACTION_UP");
            params.height = LayoutParams.WRAP_CONTENT;
            params.width = LayoutParams.WRAP_CONTENT;
            params.topMargin = (int)(event.getRawY() - (v.getHeight()/2));
            params.leftMargin = (int)(event.getRawX() - (v.getWidth()/2));
            txt_metaData.Xmargin= params.topMargin;
            txt_metaData.YMargin= params.leftMargin;
            break;
        case MotionEvent.ACTION_MOVE:
            Log.d("moving", "ACTION_MOVE");

            params.topMargin = (int)(event.getRawY() - (v.getHeight()/2));
            params.leftMargin = (int)(event.getRawX() - (v.getWidth()/2));
            v.setLayoutParams(params);
            break;
    }
    return gestureScanner.onTouchEvent(event);
}

@Override
public boolean onDown(MotionEvent e)
{   
    return true;
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
    return true;
}
@Override
public void onLongPress(MotionEvent e)
{
    Log.i("double tap called", "yes");
    ((InputMethodManager)_mContext.getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
    setEnabled(true);
    requestFocus();
    requestFocusFromTouch();
}
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
        {
            return true;
        }

        @Override
        public void onShowPress(MotionEvent e)
        {


        }    
        @Override
        public boolean onSingleTapUp(MotionEvent e)    
        {
            return true;
        }
        @Override
        public boolean onDoubleTap(MotionEvent e) 
        {
            Log.i("double tap called", "No");
             ((InputMethodManager)_mContext.getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
                setEnabled(true);
                requestFocus();
                requestFocusFromTouch();
             return true;
        }
        @Override
        public boolean onDoubleTapEvent(MotionEvent e) 
        {
             return true;
        }
        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) 
        {
            bringToFront();
            return true;
        }
    }
4

0 に答える 0