5

行のアニメーションに関する多くのチュートリアルを読みましたが、それらはすべて、選択した行をアニメーション化する方法を説明しています。なんとかできました。しかし、問題があります。行がアニメーションで削除されると、アダプターからデータを削除し、notifyDataSetChanged(); を呼び出します。行 (削除された行の下) は、アニメーションなしで上に移動します。これらの行のアニメーションを実現するにはどうすればよいですか? スムーズに滑り上がらせたい。

4

1 に答える 1

2

アイテムのクリック時にリスト アイテムを削除します。このコードが役立つことを願っています

 listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                    final int position, long id) {
                // TODO Auto-generated method stub
                Animation anim = AnimationUtils.loadAnimation(view.getContext(),
                        android.R.anim.slide_out_right);
                anim.setDuration(500);
                view.startAnimation(anim);

                new Handler().postDelayed(new Runnable() {

                    public void run() {

                        strings.remove(position);
                        mAdapter.notifyDataSetChanged();

                    }

                }, anim.getDuration());

            }
            });

アップデート

notifydatasetChanged() が呼び出されたときに機能するアーキテクチャ フレームワークに注意してください。

  1. getView メソッドが呼び出されます
  2. get view を呼び出すと、リスト ビューのすべての行が再構築されます。

あなたの場合、getView メソッドをアニメーション化する必要があります (これは、notifydatasetchanged のアクションで再度呼び出されます)。解決策は次のとおりです。

/**
       * Hear strings is the data set
       */
      @Override
        public View getView(final int position, View convertView,
                ViewGroup parent) {
            final String str = this.strings.get(position);
            final Holder holder;

            if (convertView == null) {
                convertView = mInflater.inflate(
                        android.R.layout.simple_list_item_1, null);
                convertView.setBackgroundColor(0xFF202020);

                holder = new Holder();
                holder.textview = (TextView) convertView
                        .findViewById(android.R.id.text1);
                holder.textview.setTextColor(0xFFFFFFFF);

                convertView.setTag(holder);
            } else {
                holder = (Holder) convertView.getTag();
            }

            holder.textview.setText(str);

            Animation animation = null;
            animation = new ScaleAnimation((float) 1.0, (float) 1.0, (float) 0,
                    (float) 1.0);

            animation.setDuration(750);
            convertView.startAnimation(animation);
            animation = null;

            return convertView;
        }

機能するかどうかを確認し、役に立った/役に立ったかどうかをお知らせください。

于 2013-01-15T06:23:05.530 に答える