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