經過一番研究,我發現定義了翻譯後的視角高度根本不會增加其高度。看起來整個視圖高度的總和不能超過其父級佈局的高度。也就是說,如果您將父級佈局的高度設置爲MATCH_PARENT
,並且您的屏幕尺寸爲960 dp,則即使您定義其高度(例如,高度),您的子視圖的最大高度也將爲960 dp。 android:layout_height="1200dp"
。
因此,我決定動態重新調整父級佈局的高度,並使頁腳佈局的高度爲MATCH_PARENT
。默認情況下,我的父母佈局的高度爲MATCH_PARENT
,但我撥打以下方法上onCreateView()
:
private void adjustParentHeight(){
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics metrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(metrics);
ViewGroup.LayoutParams params = mView.getLayoutParams();
mFifthLineContainer.measure(0, 0);
params.height = metrics.heightPixels + (mFifthLineContainer.getMeasuredHeight() * 3);
mView.setLayoutParams(params);
}
這將使我的頁腳佈局成爲關閉屏幕。然後我試圖使用View.animate().translationY()
,但後來我又碰到了另一個問題! Android動畫中存在一個錯誤,當您致電View.setY()
對onAnimationEnd()
會導致閃爍。看起來原因是onAnimationEnd()
在動畫真正結束之前被調用。下面是我用來解決這個問題的引用:
Android Animation Flicker
Android Flicker when using Animation and onAnimationEnd Listener
因此,我改變了我的showBottomThreeLines()
方法:
private void showBottomThreeLines(boolean show){
if(show){
TranslateAnimation translateAnimation = new TranslateAnimation(0, 0, -(mFifthLineContainer.getHeight() * 3), 0);
translateAnimation.setDuration(300);
translateAnimation.setFillAfter(true);
translateAnimation.setFillEnabled(true);
translateAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
mShiftContainer.setY(mShiftContainer.getY() + mFifthLineContainer.getHeight() * 3);
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
mShiftContainer.startAnimation(translateAnimation);
} else{
TranslateAnimation translateAnimation = new TranslateAnimation(0, 0, mFifthLineContainer.getHeight() * 3, 0);
translateAnimation.setDuration(300);
translateAnimation.setFillAfter(true);
translateAnimation.setFillEnabled(true);
translateAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
mShiftContainer.setY(mFifthLineContainer.getY());
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
mShiftContainer.startAnimation(translateAnimation);
}
}
翻譯不設置高度..它的舉動使用mShiftContainer.animate()。scaleY( - (mFifthLineContainer.getHeight()* 3))。setDuration(2000);使用mShiftContainer.animate()來查看x,y ... scale爲您完成的工作。 –
是的,它不。這就是爲什麼我認爲我需要別的東西......我嘗試了'mShiftContainer.animate()。scaleY( - (mFifthLineContainer。getHeight()* 3))。setDuration(2000);',但佈局上升,它使我的屏幕變白。我認爲'scaleY()'的參數是錯誤的。 – Harry
嘗試不同的屬性...如mShiftContainer.animate()。scaleYBy()或mShiftContainer.animate()。y() –