2014-05-14 4 views
1

캔버스에 선택한 이미지를 간단히로드하는 응용 프로그램을 만들고 싶습니다. 사용자가 이미지의 텍스트 위의 텍스트를 오버레이하여 이미지 위에 올릴 수 있습니다. . 즉 이미지 위에 텍스트를 오버레이 한 후에 텍스트를 이동하고 텍스트를 편집 할 수 있어야합니다. 어떻게 달성 할 수 있습니다. 프레임 레이아웃을로드 한 다음 텍스트 오버레이를 가져 오기 위해 텍스트보기를 동적으로 배치해야하거나 다른 작업을 수행 할 수 있어야합니다. 아래와 같은 그림을 얻고 싶습니다. enter image description here "텍스트 추가"를 작업 표시 줄에서 클릭하면 사용자가로드 한 그림에 텍스트를 추가하려고합니다. 검색 량은 많았지 만 답변을 얻지 못했습니다. 난 그냥 이미지에이 텍스트를 가져 와서 그림의 아무 곳으로나 옮기고 싶습니다. 또한 장치에 저장 될 최종 이미지는 텍스트가 이미지 위에 겹쳐서 표시됩니다. 그림에 나타나는 상자가 이미지에 나타나서는 안됩니다. 모든 전문가들이 나를 안내 해주고 있습니다.캔버스에 그림을 올리고 그림에 오버레이 텍스트를 넣고 저장하십시오.

답변

1

FrameLayout에 ImageView 및 EditText를 추가 한 다음 EditText가 이미지 위에 겹쳐집니다. To drag는 OnTouchListner을 설정해야 볼 :

 mEditText.setOnTouchListener(new OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
    final int action = event.getAction(); 

    mLastTouchX = event.getRawX(); 
    mLastTouchY = event.getRawY(); 

    switch (action) { 
    case MotionEvent.ACTION_DOWN: { 
    RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) getLayoutParams(); 
    mDeltaX = mLastTouchX - lParams.leftMargin; 
    mDeltaY = mLastTouchY - lParams.topMargin; 

    break; 
    } 
    case MotionEvent.ACTION_MOVE: { 
    mLastTouchX = event.getRawX(); 
    mLastTouchY = event.getRawY(); 

    final RelativeLayout.LayoutParams params = (LayoutParams) getLayoutParams(); 
    params.leftMargin = (int) (mLastTouchX - mDeltaX); 
    params.topMargin = (int) (mLastTouchY - mDeltaY); 
    setLayoutParams(params); 

    break; 
    } 
    } 
    invalidate(); 

    return true; 
    } 
}); 

당신이 당신의 원본 이미지와 텍스트 캔버스에 그릴 수 있습니다 최종 이미지를 만들 수 있습니다.

업데이트 : 당신은 addView로보기를 추가 할 수 있습니다

final EditText et = new EditText(getContext()); 
et.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
mFramLayout.addView(et); 

은 또한 그것은 여백 위치를 조정하는 것이 가능하다.

+0

어떻게 편집 텍스트를 동적으로 추가하여 사용자가 원하는만큼 텍스트를 그림에 추가 할 수 있습니다. – Mayur

+0

감사합니다. 참조 코드는 내 50 %의 문제를 해결하는 데 도움이되었습니다. 나머지 50 %에서 작동합니다. – Mayur

+0

안녕하세요, Mayur, 답변을 업데이트했습니다. – Bracadabra

관련 문제