2012-11-16 2 views
0

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

+0

코드 제발 할 수 있습니까? –

+0

문제를 해결했습니다. 기본적으로 레이아웃의 크기가 다르기 때문입니다. 그래서 내가하고 있던 애니메이션에 대한 호출이 틀렸어. SlidingAnimation이 열려야한다. = 새로운 SlidingAnimation (-width + dpToPx (45), width-dpToPx (45/2), 0, width-dpToPx (90), width + dpToPx (45), 0,1000, filterTypeLayout, selectBusLayout, filterOptionLayout); –

답변

-1

HorizontalScrollViews 두 개를 사용해보세요.

FrameLayout에 HSV를 추가하십시오.

HSV 용 OnTouchListener를 구현하고 터치 이벤트를 처리하여 HSV smoothScroll을 화면의 특정 위치로 만듭니다. 화면 너비에 따라 위치를 지정할 수 있습니다.

예 : ScrollView.smoothScrollTo (4 * width/5, 0);