2012-05-08 5 views
1

私はgroupItemをクリックすると、スライドを下に動かし、expandablelistviewを上にスライドしたいと思います。アンドロイドexpandableListビューアニメーションスライドアップ?

public class ExpandAnimation extends Animation { 
private static final String TAG = "ExpandAnimation"; 
private View mAnimatedView; 
private LayoutParams mViewLayoutParams; 
private int mMarginStart, mMarginEnd; 
private boolean mIsVisibleAfter = false; 
private boolean mWasEndedAlready = false; 

/** 
* Initialize the animation 
* @param view The layout we want to animate 
* @param duration The duration of the animation, in ms 
*/ 
public ExpandAnimation(View view, int duration) { 

    setDuration(duration); 
    mAnimatedView = view; 
    mViewLayoutParams = (LayoutParams) view.getLayoutParams(); 
    // if the bottom margin is 0, 
    // then after the animation will end it'll be negative, and invisible. 
    mIsVisibleAfter = (mViewLayoutParams.bottomMargin == 0); 

    mMarginStart = mViewLayoutParams.bottomMargin; 
    Log.i(TAG, "mMarginStart:>>>>>>>"+mMarginStart); 
    mMarginEnd = (mMarginStart == 0 ? (0- view.getHeight()) : 0); 
    Log.i(TAG, "mMarginEnd:>>>>>>>"+mMarginEnd); 

    view.setVisibility(View.VISIBLE); 
} 

@Override 
protected void applyTransformation(float interpolatedTime, Transformation t) { 
    super.applyTransformation(interpolatedTime, t); 
    Log.i(TAG, "applyTransformation-->"+interpolatedTime); 
    if (interpolatedTime < 1.0f) { 

     // Calculating the new bottom margin, and setting it 
     mViewLayoutParams.bottomMargin = mMarginStart 
       + (int) ((mMarginEnd - mMarginStart) * interpolatedTime); 

     // Invalidating the layout, making us seeing the changes we made 
     mAnimatedView.requestLayout(); 

    // Making sure we didn't run the ending before (it happens!) 
    } else if (!mWasEndedAlready) { 
     mViewLayoutParams.bottomMargin = mMarginEnd; 
     mAnimatedView.requestLayout(); 

     if (mIsVisibleAfter) { 
      mAnimatedView.setVisibility(View.GONE); 

     } 
     mWasEndedAlready = true; 
    } 
} 

}

public View getChildView(int groupPosition, int childPosition, 
     boolean isLastChild, View convertView, ViewGroup parent) { 
    Log.i(TAG, "getChildView"); 
    @SuppressWarnings("unchecked") 
    String text = ((Map<String, String>) getChild(groupPosition, 
      childPosition)).get("child"); 
    if (convertView == null) { 
     LayoutInflater layoutInflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     convertView = layoutInflater.inflate(R.layout.child, null); 

    } 
    View toolbar = convertView.findViewById(R.id.toolbar); 
    setAnimationView(toolbar); 
    ((LinearLayout.LayoutParams) toolbar.getLayoutParams()).bottomMargin = -75; 
    toolbar.setVisibility(View.GONE); 
    ExpandAnimation expandAni = new ExpandAnimation(toolbar, 1000); 
    toolbar.startAnimation(expandAni); 
    TextView tv = (TextView) convertView.findViewById(R.id.childTo); 
    tv.setText(text); 

    return convertView; 
} 

しかし、私はグループを折りたたむにgroupItemをクリックしたとき、それは私がgetChildViewを(呼び出し)と、それをできるようにする方法をgetChildView()method.So呼び出すことはありません。上にスライドします?

+0

mViewLayoutParams)null値を示したが、ビュー –

+0

getChildView(の値がありますされているグループの子どもたちに呼ばれて、拡大した場合にのみ呼ばれています... –

答えて

関連する問題