8

Android 4.0 の通知バー、最近のアプリ リスト、またはブラウザー タブに表示されるものと同様に、ListView にスワイプして閉じる機能を実装したいアプリに取り組んでいます。Android 2.2 以降を実行しているデバイスでアプリを実行したいと考えています。次の画像を参照してください。また、ICS のように、スワイプされるアイテムの透明度を変更したいと考えています。

Android 4.0 Web ブラウザ - 開いているタブをスワイプで消す

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.0.1_r1/com/android/browser/でICS Webブラウザのソースを確認しましたTabScrollView.java?av=fしかし、どのクラスがこの機能の実装を特に担当しているかを特定できませんでした。

ここで誰かが私を正しい方向に向けることができますか? Android 互換性ライブラリを使用してこれを行うことはできますか? 私にお知らせください。どうもありがとう。

4

2 に答える 2

3

そのような機能を実装することも考えましたが、まだ実装していません。したがって、私が提供できる唯一のことは、その問題にどのように取り組むかについてのいくつかのアイデアです. 最終的にコードを書いたら、ここに投稿します。

  1. 必要なメイン クラスは、ListAdapter(ArrayAdapter、SimpleCursorAdapter など) を拡張するカスタム アダプターです。
  2. アダプターは、View.OnTouchListener をそのすべてのビューに適用します。
  3. そのリスナーが水平スクロールを検出するたびにdx、呼び出しますconcernedView.offsetLeftAndRight(dx)(ビューをドラッグ可能にします)。もちろん、アダプターはビューの現在の水平オフセットを保存する必要があります。ユーザーがビューをドラッグしていて画面から指を離すと、touchListener もこれを検出し、スライド バック アニメーションを開始します。現在のオフセットを使用してアルファ値を計算することもできるため、画面の境界に近づくとビューがフェードアウトします。
  4. 最終的に 1 つのリスト エントリがユーザーによって却下された場合、それは少し厄介になり、次のアクションをどのように実装するのかまだわかりません: リストの内容を更新する必要があります (またはアダプタは却下されたエントリを無視する必要があります)。却下されたビューよりも下にあったビューは、ギャップを埋めるために上に移動する必要があります。ListView に新しいコンテンツをロードさせることはうまくいくと思いますが、それはギャップを即座に埋めます。それを避けるために、関連するすべてのビューを元の位置 (まだギャップがある場所) から現在の位置 (ギャップが埋められる場所) に移動させるアニメーションを開始します。

これらは、一部の人々が問題に取り組み始めるのに役立つかもしれない問題に関する私の考えのほんの一部です. 私が言ったように、私はおそらく将来いつかそれを実装するつもりであり、もちろん私はここにコードを投稿します.
コメントでフィードバックをいただければ幸いですが、私のアイデアのすべての側面を徹底的に説明したくはありません。それには時間がかかりすぎます ;)

于 2012-02-26T18:05:24.937 に答える
0

これはかなり古い質問ですが、まだこれを探している人は、https ://github.com/romannurik/Android-SwipeToDismiss の Roman Nurik のライブラリを参照してください。

これは、リストビューと通常のビューに必要な動作を作成する方法を示しています。

于 2015-06-26T04:35:39.207 に答える