java - 将按钮添加到自定义 View

标签 java android android-layout android-custom-view android-button

我尝试扩展 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;
    }

}

最佳答案

问题是您正在创建一个新的 TouchEventView 并将 Button 添加到该 View。相反,您应该将 Button 直接添加到当前的View

如果您希望能够从 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);
    }

}

关于java - 将按钮添加到自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40348432/

相关文章:

java - 使用不同的忽略字段多次映射同一对象

java - 在项目中使用 Jersey 和 Spring

android - 从 Intent 播放音频 - ActivityNotFoundException

java - 获取 ClassCastException : java. lang.Integer cannot be cast to java.lang.String 错误而无需强制转换

android - 滑动 View + 标题栏 - 更改标题名称

android-layout - PopupMenu 子菜单不遵守重力对齐

android - 为自定义 ActionBar 按钮实现 OnClick 方法

java - 安卓工作室 : change from startActivityForResult to registerForActivityResult

java - 切换行为 - java

android - 如何删除 FileNotFoundException : exception in android?