2011-02-11 57 views
0

我想创建一个从屏幕底部向上滑动的视图。我尝试在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

您是否尝试过使用动画框架?使用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构造函数的参数发挥得到它的工作的权利(这是从我的头顶)。

+0

感谢您的答复PTC。在我撰写我的文章之前,我实际上已经使用过这个解决方案,但是它并没有产生足够“足够光滑”的结果。我实际上找出了导致问题的原因。我在下面发布它,以防其他人遇到此问题。 – Kachi 2011-02-12 17:36:00

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

}