2013-05-01 5 views
1

나는 이미 버튼이있는 곳에서 페인트 응용 프로그램을 사용하고 있습니다. 하지만 다른 버튼을 추가하고 싶습니다. 내가 할 때 이전 버튼이 겹쳐져 있습니다.Android에서 프로그래밍 방식으로 레이아웃에보기 추가

저는 LayoutParams를 처음 사용하기 때문에 여기에 지침이 필요합니다. 내가 일하고 있어요 코드를 확인주세요 :

public class MyTouchEventView extends View { 

private Paint paint = new Paint(); 
private Path path = new Path(); 
private Paint circlePaint = new Paint(); 
private Path circlePath = new Path(); 

public Button btnReset; 
public Button btnSave; 
public LayoutParams params; 
public LayoutParams params2; 

@SuppressWarnings("deprecation") 
public MyTouchEventView(Context context) { 
    super(context); 

    paint.setAntiAlias(true); 
    paint.setColor(Color.GREEN); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeJoin(Paint.Join.ROUND); 
    paint.setStrokeWidth(15f); 

    circlePaint.setAntiAlias(true); 
    circlePaint.setColor(Color.BLUE); 
    circlePaint.setStyle(Paint.Style.STROKE); 
    circlePaint.setStrokeJoin(Paint.Join.MITER); 
    circlePaint.setStrokeWidth(4f); 


    btnReset = new Button(context); 
    btnReset.setText("Clear Screen"); 
    btnSave = new Button(context); 
    btnSave.setText("Save Image"); 

    params = new LayoutParams(LayoutParams.FILL_PARENT, 
      LayoutParams.WRAP_CONTENT); 
    params2 = new LayoutParams(LayoutParams.MATCH_PARENT, 
      LayoutParams.WRAP_CONTENT); 
    btnReset.setLayoutParams(params); 
      btnSave.setLayoutParams(params); 



    btnSave.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      // resets the screen 
      path.reset(); 
      // Calls the onDraw() method 
      postInvalidate(); 
     } 
    }); 

    btnReset.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      // resets the screen 
      path.reset(); 
      // Calls the onDraw() method 
      postInvalidate(); 
     } 
    }); 

} 

@Override 
protected void onDraw(Canvas canvas) { 

    canvas.drawPath(path, paint); 
    canvas.drawPath(circlePath, circlePaint); 
} 

내 MainActivity :

public class DrawingBrush extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    MyTouchEventView tv = new MyTouchEventView(this); 

    setContentView(tv); 
    addContentView(tv.btnReset, tv.params); 
      addContentView(tv.btnSave, tv.params); 
    } 

얘들 아 당신이 날 내가 여기에 누락 무엇인지 알아내는 데 도움이 수 있습니까? 미리 감사드립니다.

답변

1

여러 개의보기가 필요한 경우 레이아웃을 사용하여 래핑해야합니다. 귀하의 경우 View에서 상속받는 대신 FrameLayout을 사용할 수 있습니다. 거기에 버튼을 직접 추가하십시오.

public class MyTouchEventView extends FrameLayout { 

private Paint paint = new Paint(); 
private Path path = new Path(); 
private Paint circlePaint = new Paint(); 
private Path circlePath = new Path(); 

public Button btnReset; 
public Button btnSave; 
public FrameLayout.LayoutParams params; 
public FrameLayout.LayoutParams params2; 

@SuppressWarnings("deprecation") 
public MyTouchEventView(Context context) { 
    super(context); 

    ... 

    btnReset = new Button(context); 
    btnReset.setText("Clear Screen"); 
    ... 

    params = new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT, 
      LayoutParams.WRAP_CONTENT); 
    btnReset.setLayoutParams(params); 
    addView(btnReset); 


    ... 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    canvas.drawPath(path, paint); 
    canvas.drawPath(circlePath, circlePaint); 
} 

그리고 BTW : 당신은 단지 하나의 콘텐츠보기를 설정할 수 있습니다, 그래서 setContentView() 여러 번 호출 단지 그것을 대체합니다.

+0

안녕하세요,하지만 여전히 첫 번째 단추를 겹치기 시도했습니다 –

+0

만약 당신이 그들을 겹치기를 원하지 않는다면, LinearLayout을 사용할 수 있습니다. 먼저 사용자 정의보기를 추가 한 다음 단추를 추가하십시오. 레이아웃에 대한 추가 정보 : http://developer.android.com/guide/topics/ui/declaring-layout.html – SimonSays

+0

안녕하세요, simosays를 사용하여 LinearLayout으로 변경했는데 더 이상 겹쳐지지는 않지만 현재 문제는 없습니다. 캔버스에 그리다. 뭐가 문제 야? –

관련 문제