0

Viewのボタンを追加したり、作業している子供のために、Viewの代わりにLinearLayoutを延長しようとしましたが、まだ出力がありません。概念的に私はどこかで間違っています。ボタンをカスタム表示に追加

public class TouchEventView extends LinearLayout { 

    private Paint paint = new Paint(); 
    private Path path = new Path(); 
    private ViewGroup viewGroup; 

    public TouchEventView(Context ctx) { 
     super(ctx); 

     //Button Code Starts Here 
     LinearLayout touch = new TouchEventView(ctx); 
     Button bt = new Button(ctx); 
     bt.setText("A Button"); 
     bt.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT)); 
     touch.addView(bt); //Button Not Working 
     paint.setAntiAlias(true); 
     paint.setColor(Color.BLACK); 
     paint.setStrokeJoin(Paint.Join.ROUND); 
     paint.setStyle(Paint.Style.STROKE); 
     paint.setStrokeWidth(5f); 
     this.setBackgroundColor(Color.WHITE); 
    } 

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

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     float xPos = event.getX(); 
     float yPos = event.getY(); 

     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       path.moveTo(xPos,yPos); 
       return true; 
      case MotionEvent.ACTION_MOVE: 
       path.lineTo(xPos,yPos); 
       break; 
      case MotionEvent.ACTION_UP: 
       break; 
      default: 
       return false; 
     } 

     invalidate(); 
     return true; 
    } 

} 
+1

あなたのTouchEventViewコンストラクタが新しいTouchEventView()を呼び出していますか? それは正しくありません... – marmor

+0

はい、あなたは正しいです。私はそれを固定感謝した。 –

答えて

3

問題は、あなたが新しいTouchEventViewを作成し、そのViewButtonを追加しているということです。代わりに、現在ViewButtonを直接追加する必要があります。

XMLから属性を取得できるようにするには、LinearLayoutの他のコンストラクタも実装する必要があります。

public class TouchEventView extends LinearLayout { 

    public TouchEventView(Context context) { 
     this(context, null); 
    } 

    public TouchEventView(Context context, AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public TouchEventView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(); 
    } 

    private void init() { 
     Button button = new Button(getContext()); 
     button.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 
     addView(button); 
    } 

} 
関連する問題