我正在尝试创建一个从屏幕底部向上滑动的视图。我尝试在xml中设置视图的初始位置(应该在屏幕外),但不是将imageview放在我指定的位置,而是截断它。我的第二个想法是在onWindowFocusChanged方法中以编程方式设置视图的位置。这是我的代码
@Override
public void onWindowFocusChanged(boolean hasFocus) {
if(hasFocus) {
slide_dock.layout(slide_dock.getLeft(), phone_height - 70, slide_dock.getRight(), phone_height + 230);
}
}
问题是这只适用于某些时候。我一直在调试它,我相信问题是我的onWindowFocusChanged函数完成后,slide_dock的布局值会改变,我只是不确定在哪里。这里有人可以帮帮我吗?或者将我链接到可以深入解释布局过程的地方?我一直在寻找无济于事。
答案 0 :(得分:0)
您是否尝试过使用动画框架?使用RelativeLayout并将子视图与父级的底部对齐。然后使用以下动画,可能会使用View.setVisibility(int)
View myView = View(this);
TranslateAnimation slideUp = new TranslateAnimation(myView.getHeight(), 0, 0, 0);
slideUp.setDuration(250); // millis
slideUp.setFillAfter(true); // Required for animation to "stick" when done
myView.startAnimation(slideUp);
您可能必须使用TranslateAnimation构造函数参数才能使其正常工作(这是我的头脑)。
答案 1 :(得分:0)
所以我找出了上述问题的原因,我在这里发布,以防任何人遇到同样的问题。
ImageView调整大小的原因是因为在ImageView的onMeasure函数中,如果它不认为它适合屏幕,它会自行调整大小。您可以在此处查看ImageView源并查看其工作原理:http://www.google.com/codesearch/p?hl=en#uX1GffpyOZk/core/java/android/widget/ImageView.java&d=3
为了解决这个问题,我创建了一个扩展ImageView并覆盖onMeasure方法的自定义视图。在我的新onMeasure方法中,我只是调用setDimension来为我的新视图提供我希望它拥有的维度,这有效地阻止了视图调整大小,就像之前做的那样
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(measureWidth(widthMeasureSpec), 300);
}