Android 自定义视图位置

Android 自定义视图位置,android,Android,我想创建自己的自定义视图。它的不同寻常之处在于它应该在x-view.getWidth()处绘制。我该怎么做 提前谢谢 Gratzi您可以使用android:paddingLeft和android:paddingTop通过一些像素值来定位布局。要知道您想要做什么有点困难。如果您想定位视图,请仔细阅读(特别是,它允许您使用不同的工具非常自由地放置子视图)。您可能应该覆盖onLayout()。例如,我认为这可能有效,但我没有测试过: @Override public void onLayout(bo

我想创建自己的自定义视图。它的不同寻常之处在于它应该在x-view.getWidth()处绘制。我该怎么做

提前谢谢


Gratzi

您可以使用
android:paddingLeft
android:paddingTop
通过一些像素值来定位布局。要知道您想要做什么有点困难。如果您想定位视图,请仔细阅读(特别是,它允许您使用不同的工具非常自由地放置子视图)。

您可能应该覆盖
onLayout()
。例如,我认为这可能有效,但我没有测试过:

@Override 
public void onLayout(boolean changed, int l, int t, int r, int b) {
    l = l - this.getWidth();
    this.layout(l, t, r, b);
    super.onLayout(changed, l, t, r, b);
}
第二次尝试:

@Override 
public void onLayout(boolean changed, int l, int t, int r, int b) {
    if(changed) {
        int newLeft = 2*l - r;
        this.layout(newLeft, t, r, b);
    }
    super.onLayout(false, l, t, r, b);
}

基本上,在
onLayout()
中,您将能够检索视图的维度。

覆盖
onLayout
方法,并使用
setRight
setLeft
方法设置新的右边缘和左边缘。这样,可以将视图向左移动

protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
    if(changed) {
        int amount = getWidth();
        right -= amount;
        left -= amount;

        setRight(right);
        setLeft(left);
    }
}

我认为您应该选择覆盖onSizeChanged,这将为您提供自定义视图的宽度和高度:

@Override
public void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    myCustomOffset = offsetVar - w;
}

你说的x-view.getWidth()是什么意思?我的意思是视图应该在初始点的左侧绘制。我知道,但我需要视图的宽度。是的,不幸的是,我对自定义视图不是很有经验。你有没有试着在那里记录任何东西,看看它是否在改变什么?我可能只是有一个逻辑错误——我不知道应该按什么顺序调用layout/super.onLayout。还有更多问题。this.layout强制只调用布局,因此创建了一个无限循环。第二,getWidth()此时为零。但是,即使我使用一个伪值并调用super.onLayout(已更改,l+30,t,r,b);什么也没发生,试试上面的。刚意识到你不应该需要宽度,因为你已经有了边界。我认为,用一个假布尔值调用super.onLayout应该可以停止无限循环。对不起,结果是一样的。