Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:把按钮放在画好的线上_Android_Android Widget_Android Canvas_Android View - Fatal编程技术网

Android 安卓:把按钮放在画好的线上

Android 安卓:把按钮放在画好的线上,android,android-widget,android-canvas,android-view,Android,Android Widget,Android Canvas,Android View,我正在动态创建一个自定义视图,它是一个使用按钮、图像和线条的交互式流程图。我为每个元素创建一个子视图,然后将它们添加到主视图组中。即: // lines LineDrawView lineView = new LineDrawView(getActivity(),lineArray); lineView.setClickable(false); layout.addView(lineView); 然后我的按钮: Button button = new Button(getActivity())

我正在动态创建一个自定义视图,它是一个使用按钮、图像和线条的交互式流程图。我为每个元素创建一个子视图,然后将它们添加到主视图组中。即:

// lines
LineDrawView lineView = new LineDrawView(getActivity(),lineArray);
lineView.setClickable(false);
layout.addView(lineView);
然后我的按钮:

Button button = new Button(getActivity());
button.setText(title);
layout.addView(button, new AbsoluteLayout.LayoutParams(width, height, x, y));
我的所有布局参数都是预定义的,并存储在定义每个流程图的数据库中。我得到了我想要的效果,除了我的台词。在某些情况下,我只画了一条线,我希望按钮位于线的顶部。相反,我的产品线始终处于最前沿。即:

我的问题是如何强制我的线视图处于背景中?以下是我的线视图代码:

public class LineDrawView extends View {

private int KMULTIPLIER = 2;
private ArrayList<String []> lineArray;

public LineDrawView(Context context, ArrayList<String []> lineArray) {
    super(context);
    this.lineArray = lineArray;
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);;
    paint.setColor(Color.BLACK);
    paint.setStrokeWidth(3);

    // determine the screen size & initialize CONSTANT
    int screenSize = getResources().getConfiguration().screenLayout &
            Configuration.SCREENLAYOUT_SIZE_MASK;

    switch(screenSize) {
        case Configuration.SCREENLAYOUT_SIZE_LARGE:
            KMULTIPLIER = 4;
            break;
        case Configuration.SCREENLAYOUT_SIZE_NORMAL:
            KMULTIPLIER = 3;
            break;
        case Configuration.SCREENLAYOUT_SIZE_SMALL:
            KMULTIPLIER = 2;
            break;
        default:
    }

    // draw the lines
    if (lineArray.size() > 0) {
        for (int i=0;i < lineArray.size();i++) {
            String[] array = lineArray.get(i);
            int x = Integer.parseInt(array[0].trim())*KMULTIPLIER;
            int y = Integer.parseInt(array[1].trim())*KMULTIPLIER;
            int x2 = Integer.parseInt(array[2].trim())*KMULTIPLIER;
            int y2 = Integer.parseInt(array[3].trim())*KMULTIPLIER;

            canvas.drawLine(x, y, x2, y2, paint);
        }
    }   
}
公共类LineDrawView扩展视图{
专用int KMULTIPLIER=2;
私人ArrayList lineArray;
公共LineDrawView(上下文,ArrayList lineArray){
超级(上下文);
this.lineArray=lineArray;
}
@凌驾
受保护的void onDraw(画布){
super.onDraw(帆布);
油漆油漆=新油漆(油漆.防油漆别名标志);;
油漆。设置颜色(颜色。黑色);
油漆。设置行程宽度(3);
//确定屏幕大小&初始化常数
int screenSize=getResources().getConfiguration().screenLayout&
配置.屏幕布局\尺寸\遮罩;
开关(屏幕大小){
案例配置。屏幕布局\大小\大:
KMULTIPLIER=4;
打破
案例配置。屏幕布局\大小\正常:
KMULTIPLIER=3;
打破
机箱配置。屏幕布局\大小\小:
KMULTIPLIER=2;
打破
违约:
}
//划清界限
如果(lineArray.size()>0){
对于(int i=0;i
}

如有任何建议,将不胜感激。高级版谢谢。

试试这个:
layout.addView(lineView,0)

谢谢你的回复!我以为我已经试过了,但现在它起作用了。唯一的区别是,在我之前先添加行并将其设置为0。现在我添加最后一行并将其设置为0。