2011-08-22 4 views

답변

0

나는 당신이 이미지 위에 그려려고한다는 것을 알고 있습니다. 그런 경우에는 사용자 정의보기를 만들고 BitmapFactory를 사용하여 이미지를 가져옵니다. 비트 맵 객체를 얻은 후에는 복사 메서드를 사용하여 해당 복사본을 뷰의 캔바스에 사용합니다. 이제 사용자 정의보기의 onDraw 메소드를 대체하고 그 위에 아무 것도 그릴 수 있습니다.

이보기를 레이아웃에 추가 할 수 있으며보기가 스크롤됩니다.

편집 : 샘플 코드

이 코드는 도움이 될만한 코드입니다. 나는 모든 코드를 검토 할 시간이 없다. 그러나 귀하의 요구 사항을 이해하려고 노력했습니다.

내가 활동에 대한 코드를 표시하고

, 그 XML 및 사용자 정의보기

Activity.java

public class DrawDemo extends Activity { 
    private FrameLayout container; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.draw_demo_layout); 

     container = (FrameLayout)findViewById(R.id.sc);   
     container.addView(new DrawView(this)); 
    } 

    public void drawHandler(View target){ 
     container.addView(new DrawView(this)); 
    } 

    public void clearHandler(View target){ 
     if(container.getChildCount() != 1){ 
      container.removeViewAt(container.getChildCount()-1); 
     } 
    } 
} 

draw_demo_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:orientation="vertical"> 
    <FrameLayout android:orientation="vertical" 
     android:layout_width="fill_parent" android:layout_height="0dip" 
     android:id="@+id/sc" android:scrollbars="horizontal" 
     android:layout_weight="1.0"> 
     <ImageView android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:src="@drawable/chips"/> 
    </FrameLayout> 
    <Button android:layout_width="fill_parent" 
     android:layout_height="wrap_content" android:text="Draw" 
     android:onClick="drawHandler"/> 
    <Button android:layout_width="fill_parent" 
     android:layout_height="wrap_content" android:text="Clear" 
     android:onClick="clearHandler"/>  
</LinearLayout> 

DrawView.java

public class DrawView extends View { 

    public DrawView(Context context) { 
     super(context); 
     setLayoutParams(new LayoutParams(LinearLayout.LayoutParams.FILL_PARENT 
      ,LinearLayout.LayoutParams.FILL_PARENT)); 
    } 

    public DrawView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     Paint p = new Paint(); 
     p.setColor(Color.RED); 
     p.setStrokeWidth(5); 
     canvas.drawLine(50, 50, 100, 150, p); 
     canvas.drawLine(100, 150, 20, 50, p); 
    } 
} 

이 액티비티에는 비트 맵을 보유하는 기본 이미지 뷰가있는 framelayout이 있습니다. 우리는 그 위에 사용자 지정 그리기보기를 추가하고 그 위에 도면을 작성합니다. 도면을 지우려면 drawview를 제거하고 다시 그릴 필요가있는 경우 다른 것을 추가하십시오. 가장 효율적인 방법은 아닙니다. 그러나 시작해야합니다.

+0

이미지가 지울 때 (보기에 검은 색으로 표시됨) 이미지가 지워졌을 때만 페인트를 지우고 페인트에 대한 스크롤링이 가능합니다. –

+0

글쎄, 내가 해줄 수있는 간단한 해킹은 framelayout에 2 개의보기를 만드는 것이었다. 기본 뷰는 이미지와 함께 이미지 뷰일 것이고 secondview는 비어있는 비트 맵을 가진 커스텀 뷰가 될 것이고 당신은 그 뷰에 드로잉을 추가하고 원하는대로 비트 맵을 지우지 만 근본적인 이미지 뷰가 보일 것입니다. 바깥 쪽 프레임 레이아웃에 스크롤을 적용합니다. 이것은 해킹처럼 보인다. 단일보기를 사용하고 2 비트 맵을 스태킹하여이 모든 작업을 완료 할 수 있습니다. – blessenm

+0

내 코드를보고 어디서 바꿔야할지 말해주세요. http://dl.dropbox.com/u/38493970/Full.java –

관련 문제