自定义视图位置

时间:2011-05-09 14:36:01

标签: android

我想创建自己的自定义视图。不寻常的是它应该在x - view.getWidth()绘制。我怎么能这样做?

提前致谢!

的Gratzi

5 个答案:

答案 0 :(得分:0)

您可以使用android:paddingLeftandroid:paddingTop将某个像素值添加到该布局,以便根据需要进行定位。

答案 1 :(得分:0)

要说出你想做什么有点难。如果您想要定位视图,请阅读layouts(特别是RelativeLayout,这样您就可以使用不同的gravities非常自由地放置子视图。

答案 2 :(得分:0)

您应该覆盖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()内您可以检索视图的尺寸。

答案 3 :(得分:0)

覆盖onLayout方法,并使用setRightsetLeft方法设置新的左右边缘。这样,您将视图移动到左侧。

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

答案 4 :(得分:0)

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

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