0

Я попытался расширить LinearLayout вместо простого View для добавления кнопок и работающих детей View, но я все еще не получаю никакого вывода. Понятно, что я где-то не прав.Добавить кнопку в пользовательский вид

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 и добавив к этому ButtonView. Вместо этого вы должны добавить Button непосредственно к текущему View.

Вы также должны реализовать другие конструкторы от LinearLayout, если хотите получить любые атрибуты из XML.

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); 
    } 

} 
Смежные вопросы