zomato 앱에서 필터와 같은 것을 구현하려고합니다. 첫 번째 화면의 필터를 선택할 때 첫 번째 화면의 일부만 표시되고 두 번째 화면 전체는 필터 유형은 선택시 첫 번째와 두 번째 화면을 모두 이동 한 후에 모든 유형의 필터를 제공합니다.Android 레이아웃 문제 : 화면이 보이지 않습니다.
필자는 내부 화면 (필터 유형 및 필터 옵션)을 보이지 않는 두 개의 상대적 레이아웃으로 만든 다음 슬라이드하고 레이아웃 매개 변수의 여백을 변경하고 레이아웃을 요청하여 표시되도록했습니다.
올바른 여백을 제공하더라도 두 번째 화면은 표시되지 않지만 세 번째 화면 (필터 옵션)이 표시됩니다.
아무도 도와 줄 수 있습니까?
편집 CODE :
개인 클래스 SlidingAnimation 애니메이션 연장 {
private float mainViewStartX, mainViewEndX;
private float sideViewFromX, sideViewToX;
private float sideView2FromX,sideView2ToX;
private View slideInView,slideOutView,slideInView2;
public SlidingAnimation(float fromX, float toX, float sideViewFromX,
float sideViewToX,float sideView2FromX,float sideView2ToX, int duration,View slideInView,View slideOutView,View slideInView2) {
setDuration(duration);
this.slideInView = slideInView;
this.slideOutView = slideOutView;
this.slideInView2 = slideInView2;
mainViewEndX = toX;
mainViewStartX = fromX;
slideOutViewLayoutParams = (LayoutParams) slideOutView.getLayoutParams();
this.sideViewFromX = sideViewFromX;
this.sideViewToX = sideViewToX;
slideInViewLayoutParams = (LayoutParams) slideInView.getLayoutParams();
if(slideInView2!=null){
Log.w(null,"Side View two also exists");
this.sideView2FromX = sideView2FromX ;
this.sideView2ToX = sideView2ToX;
slideInView2LayoutParams = (LayoutParams)slideInView2.getLayoutParams();
}
}
@SuppressLint("NewApi")
@Override
protected void applyTransformation(float interpolatedTime,
Transformation t) {
super.applyTransformation(interpolatedTime, t);
if (interpolatedTime < 1.0f) {
// Applies a Smooth Transition that starts fast but ends slowly
if(slideInView2==null){
slideOutViewLayoutParams.rightMargin = (int) (mainViewStartX + ((mainViewEndX - mainViewStartX) * (Math
.pow(interpolatedTime - 1, 5) + 1)));
slideInViewLayoutParams.rightMargin = (int) (sideViewFromX - ((sideViewFromX-sideViewToX) * (Math
.pow(interpolatedTime - 1, 5) + 1)));
slideOutViewLayoutParams.leftMargin = (int)- mainViewEndX;
slideInView.requestLayout();
slideOutView.requestLayout();
Log.w(null,"Slide Out Right Margin:"+slideOutViewLayoutParams.rightMargin);
Log.w(null,"Slide Out Left Margin:"+slideOutViewLayoutParams.leftMargin);
Log.w(null,"Slide In Left Margin:"+slideInViewLayoutParams.leftMargin);
}
else{
slideOutViewLayoutParams.rightMargin = (int) (mainViewStartX + ((mainViewEndX - mainViewStartX) * (Math
.pow(interpolatedTime - 1, 5) + 1)));
slideInViewLayoutParams.rightMargin = (int) (sideViewFromX + ((sideViewToX-sideViewFromX) * (Math
.pow(interpolatedTime - 1, 5) + 1)));
slideOutViewLayoutParams.leftMargin = (int)- mainViewEndX;
slideInViewLayoutParams.leftMargin = (int)-sideViewToX;
slideInView2LayoutParams.rightMargin = (int) (sideView2FromX - ((sideView2FromX-sideView2ToX) * (Math
.pow(interpolatedTime - 1, 5) + 1)));
slideOutView.requestLayout();
slideInView.requestLayout();
slideInView2.requestLayout();
Log.w(null,"Slide Out Right Margin:"+slideOutViewLayoutParams.rightMargin);
Log.w(null,"Slide Out Left Margin:"+slideOutViewLayoutParams.leftMargin);
Log.w(null,"Slide In Left Margin:"+slideInViewLayoutParams.leftMargin);
Log.w(null,"Slide In Right Margin:"+slideInViewLayoutParams.rightMargin);
Log.w(null,"Slide In View 2 Right Margin:"+slideInView2LayoutParams.rightMargin);
}
}
}
}
호 :
SlidingAnimation 새로운 = 오픈 SlidingAnimation (-width + dpToPx (45), 폭 - dpToPx (45/45), 0,1000, filterTypeLayout, selectBusLayout, filterOptionLayout);
코드 제발 할 수 있습니까? –
문제를 해결했습니다. 기본적으로 레이아웃의 크기가 다르기 때문입니다. 그래서 내가하고 있던 애니메이션에 대한 호출이 틀렸어. SlidingAnimation이 열려야한다. = 새로운 SlidingAnimation (-width + dpToPx (45), width-dpToPx (45/2), 0, width-dpToPx (90), width + dpToPx (45), 0,1000, filterTypeLayout, selectBusLayout, filterOptionLayout); –