3

私はこの例を私のプロジェクトに使用してい
ます https://github.com/Udinic/SmallExamples/tree/master/ExpandAnimationExample
ですが、アイテムをクリックするとクラッシュしました!
私のコード:

public class AccountContents extends Fragment {
private AccountItem[] rootContents;
private ListView ls1;
private CArrayAdapter adapter;
private Context context;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {

    final View V = inflater.inflate(R.layout.account_contents, container,
    false);
    context = getActivity().getApplicationContext();
    rootContents = fourshared.rootContents;
    adapter = new CArrayAdapter(context, rootContents);
    ls1 = (ListView) V.findViewById(R.id.AC_listView);
    ls1.setAdapter(adapter);
    ls1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, final View view,
            int position, long id) {

            View toolbar = V.findViewById(R.id.toolbar);
            ExpandAnimation expandAni = new ExpandAnimation(toolbar, 500);
            toolbar.startAnimation(expandAni);
        }
    });
    return V;
    }
}

ExpandAnimation.java :

public class ExpandAnimation extends Animation {
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;
    mMarginEnd = (mMarginStart == 0 ? (0- view.getHeight()) : 0);

    view.setVisibility(View.VISIBLE);
}

@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
    super.applyTransformation(interpolatedTime, t);

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

私の英語でごめんなさい:(。

4

1 に答える 1

2

このコードを試す

get Context の最初の間違い

context = V.getContext();

リストの 2 番目のクリック イベント

View toolbar =view.findViewById(R.id.toolbar);

更新されたコード

public class AccountContents extends Fragment {
private AccountItem[] rootContents;
private ListView ls1;
private CArrayAdapter adapter;
private Context context;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {

    final View V = inflater.inflate(R.layout.account_contents, container,
    false);
    context = V.getContext();
    rootContents = fourshared.rootContents;
    adapter = new CArrayAdapter(context, rootContents);
    ls1 = (ListView) V.findViewById(R.id.AC_listView);
    ls1.setAdapter(adapter);
    ls1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, final View view,
            int position, long id) {

            View toolbar = view.findViewById(R.id.toolbar);
            ExpandAnimation expandAni = new ExpandAnimation(toolbar, 500);
            toolbar.startAnimation(expandAni);
        }
    });
    return V;
    }
}
于 2012-04-23T07:04:56.057 に答える