13

アイテムを含むListViewを取得しました。ユーザーがアイテムをクリックすると、その高さがゼロにスケーリングされ、下のすべてのアイテムが上にスクロールする必要があります。以下の私のコードは機能しません。私のコードでは、クリックされたアイテムは右に拡大縮小されますが、下のアイテムは上にスクロールせず、同じ位置に留まります。私もLinearLayoutで試しましたが、同じ問題があります。

これを正しく行うアプリがあります。それはタスクと呼ばれます。

この小さな画像は問題を説明するはずです

私の現在の実装は次のようになります。

@Override
public void onItemClick(AdapterView<?> arg0, View v, final int index,
        long id) {
    Animation anim = AnimationUtils.loadAnimation(getActivity(),
            R.anim.scaleup);
    v.startAnimation(anim);
}

<set android:shareInterpolator="false" >
    <scale
        android:duration="700"
        android:fillAfter="false"
        android:fillBefore="false"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotY="0%"
        android:toXScale="1.0"
        android:toYScale="0.0" />
</set>

4

3 に答える 3

7

これが私が作成したクラス(ここで見つけたソースから変更)で、必要な機能を提供する可能性があります。

public class FadeUpAnimation extends Animation {

int mFromHeight;
View mView;

public FadeUpAnimation(View view) {
    this.mView = view;
    this.mFromHeight = view.getHeight();
}

@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
    int newHeight;
    newHeight = (int) (mFromHeight * (1 - interpolatedTime));
    mView.getLayoutParams().height = newHeight;
    mView.setAlpha(1 - interpolatedTime);
    mView.requestLayout();
}

@Override
public void initialize(int width, int height, int parentWidth,
        int parentHeight) {
    super.initialize(width, height, parentWidth, parentHeight);
}

@Override
public boolean willChangeBounds() {
    return true;
}
}

それからこれは私がそれを使用する方法です

View tv = ...
Animation a = new FadeUpAnimation(tv);
a.setInterpolator(new AccelerateInterpolator());
a.setDuration(300);
tv.setAnimation(a);
tv.startAnimation(a);

あなたはそれをあなたのニーズに合うように手に入れることができるかどうか見るためにそれで遊ぶことができます。

于 2012-08-17T18:14:38.820 に答える
3

クリックしたアイテムをもう一度使用しますか?そうでない場合は、

  1. アニメーションが終了するまで待ちます
  2. アンダーレイデータを保存する場所からアイテムを削除します
  3. 次に、listadapterのnotifyDataSetChanged()メソッドを呼び出します
于 2012-08-17T18:04:45.630 に答える
0

AndroidはHTMLのようには機能しません。ビューの幅、高さ、または可視性を変更しても、他のビューはそれらの位置を更新しません。それを行う必要がある場合は、すべてのリストビューと内部のビューを個別に更新する必要があります。これは複雑なコードです。

于 2012-08-17T17:33:40.937 に答える