2012-10-23 2 views
1

현재 9 개의 Old Androids를 사용하여 슬라이더 메뉴와 같이 RelativeLayout을 애니메이션화합니다.이 슬라이드 메뉴는 맨 아래로 슬라이드합니다. 나는 여러 가지 방법으로 시도했다. 누군가 제안 할 수 있는가?애니메이션 후 클릭이 작동하도록보기를 배치하는 방법

private OnClickListener slideClick = new OnClickListener(){ 
    @Override 
    public void onClick(View v) { 
     slideGroups.bringToFront(); 

     if(!mPulledDown) { 
      ObjectAnimator oa = ObjectAnimator.ofFloat(slideGroups, "translationY", slideGroups.getHeight()-80); 
      oa.addListener(new AnimatorListener() { 
       @Override 
       public void onAnimationStart(Animator arg0) {} 

       @Override 
       public void onAnimationRepeat(Animator arg0) {} 

       @Override 
       public void onAnimationEnd(Animator arg0) { 
        arrow.setImageResource(R.drawable.arrowup); 
        if(Application.getAndroidAPILevel() < 11) { 
         // only if pre 3.0 (api level 11) 
         Toast.makeText(FriendsActivity.this, String.format("api level %s", 
           Application.getAndroidAPILevel()), Toast.LENGTH_SHORT).show(); 
         //RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) slideGroups.getLayoutParams(); 

         // clear animation to prevent flicker 
         slideGroups.clearAnimation(); 

         // set new "real" position of wrapper 
         RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, slideGroups.getWidth()); 
         //lp.addRule(RelativeLayout.BELOW, R.id.branchFinderIncludeHeader); 
         slideGroups.setLayoutParams(lp); 

        } 
       } 

       @Override 
       public void onAnimationCancel(Animator arg0) {} 
      }); 
      oa.start(); 
     } 
     else 
     { 
      ObjectAnimator oa = ObjectAnimator.ofFloat(slideGroups, "translationY", 0); 
      oa.addListener(new AnimatorListener() { 
       @Override 
       public void onAnimationStart(Animator arg0) {} 

       @Override 
       public void onAnimationRepeat(Animator arg0) {} 

       @Override 
       public void onAnimationEnd(Animator arg0) { 
        arrow.setImageResource(R.drawable.arrowdown); 
        if(Application.getAndroidAPILevel() < 11) { 
         // only if pre 3.0 (api level 11) 
         Toast.makeText(FriendsActivity.this, String.format("api level %s", 
           Application.getAndroidAPILevel()), Toast.LENGTH_SHORT).show(); 
        } 
       } 

       @Override 
       public void onAnimationCancel(Animator arg0) {} 
      }); 
      oa.start(); 
     } 

     mPulledDown = !mPulledDown;   
    } 
}; 

난 그냥 SDK 레벨 4와 새로운 작업 할 뭔가가 필요 : 여기

애니메이션 코드입니다. 현재 터치/터치하면 해당 이벤트가 슬라이더 아래의 목록으로 전달됩니다. 다른 정보가 필요한지 알려주십시오. slideGroups는 RelativeLayout입니다. 화살표는 이미지 뷰입니다. groupsButton은 텍스트와 이미지 버튼이있는 LinearLayout입니다. groupsButton은 클릭 할 수 있어야합니다. 그것이 팽창하고 붕괴 될 것으로 예상됩니다.

미리 감사드립니다.

답변

2

소수의 사람들이 내 질문을 솔루션으로 편집하여 기고합니다. 나는 그 (것)들에게 신용을주고 싶으면 편집을 upvote 할 수 없다. 후손을 위해, 저를 위해 작동하는 해결책은 여기있다.

int originalMarginLeft = 0; 
int originalMarginTop = 0; 
int originalMarginRight = 0; 
int originalMarginBottom = 0; 
int originalLeft = 0; 
int originalTop = 0; 
int originalRight = 0; 
int originalBottom = 0; 
int originalX = 0; 
int originalY = 0; 
int originalHeight = 0; 

private OnClickListener slideClick = new OnClickListener(){ 
    @Override 
    public void onClick(View v) { 
     slideGroups.bringToFront(); 

     if(originalMarginLeft == 0) { 
      RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) slideGroups.getLayoutParams(); 
      originalMarginLeft = params.leftMargin; 
      originalMarginTop = params.topMargin; 
      originalMarginRight = params.rightMargin; 
      originalMarginBottom = params.bottomMargin; 
      originalLeft = slideGroups.getLeft(); 
      originalTop = slideGroups.getTop(); 
      originalRight = slideGroups.getRight(); 
      originalBottom = slideGroups.getBottom(); 
      originalHeight = params.height; 
     } 

     if(!mPulledDown) { 
      ObjectAnimator oa = ObjectAnimator.ofFloat(slideGroups, "translationY", originalHeight); 
      oa.addListener(new AnimatorListener() { 
       @Override 
       public void onAnimationStart(Animator arg0) {} 

       @Override 
       public void onAnimationRepeat(Animator arg0) {} 

       @Override 
       public void onAnimationEnd(Animator arg0) { 
        arrow.setImageResource(R.drawable.arrowup); 
        if(Application.getAndroidAPILevel() < 11) { 

         slideGroups.clearAnimation(); 
         RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(slideGroups.getWidth(), slideGroups.getHeight()); 
         lp.leftMargin = originalMarginLeft; 
         lp.rightMargin = originalMarginRight; 
         slideGroups.setLayoutParams(lp); 

        } 
       } 

       @Override 
       public void onAnimationCancel(Animator arg0) {} 
      }); 
      oa.start(); 
     } 
     else 
     { 
      ObjectAnimator oa = ObjectAnimator.ofFloat(slideGroups, "translationY", -originalHeight+60); 
      oa.addListener(new AnimatorListener() { 
       @Override 
       public void onAnimationStart(Animator arg0) {} 

       @Override 
       public void onAnimationRepeat(Animator arg0) {} 

       @Override 
       public void onAnimationEnd(Animator arg0) { 
        arrow.setImageResource(R.drawable.arrowdown); 
        if(Application.getAndroidAPILevel() < 11) { 

         slideGroups.clearAnimation(); 
         RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(slideGroups.getWidth(), slideGroups.getHeight()); 
         lp.leftMargin = originalMarginLeft; 
         lp.rightMargin = originalMarginRight; 
         lp.topMargin = originalMarginTop; 
         lp.bottomMargin = originalMarginBottom; 
         slideGroups.setLayoutParams(lp); 
        } 
       } 

       @Override 
       public void onAnimationCancel(Animator arg0) {} 
      }); 
      oa.start(); 
     } 

     mPulledDown = !mPulledDown;   
    } 
}; 
관련 문제