2011-07-01 9 views
11

iPhoneアプリをアンドロイドアプリに移植していますが、難しさの1つはiPhone固有の機能を作り直すことです。Androidのリストビューアイテムのスライドインボタン効果

iPhoneのネイティブ機能が見つかりました: リストビューでリストされたアイテムにスライドタッチを実行すると、削除ボタンが表示されます。

アンドロイド版がありますか? 再利用/カスタマイズすることはできますか?

+1

代わりに特定の動作があります。長いクリックのように、オプションの一覧が表示されます.. – ngesh

+0

私は本当にこれを知りたいです.... :) –

答えて

0

リストビュー自体にジェスチャリスナーを実装しようとするか、正しいIDを取得するのが難しいかもしれないと思います。私は自分でそれをしていないので、私は正確に答えることはできません。

そうしないと、リストビュー内の項目として自分のビューを表示でき、すべての子にジェスチャリスナーがある可能性があります。

Fling gesture detection on grid layoutいくつかの基本的な読書やコード例については

1

これはもう少し複雑達成することです。これは私が上位レベルから話すことです。

  1. リスト項目を保持するために、カスタムのViewGroup /レイアウトを作成します。このレイアウトの中に、あなたのテキストラインのイメージやこれまでのもの、そして削除ボタンがあります。ここでは、削除ボタンを隠すか再表示するジェスチャーも聞きます。

  2. あなたのリストアダプターでは、どの項目が削除ボタンを表示しているかを追跡する必要があります。また、リスト項目削除ボタンのそれぞれにクリックリスナーを適用する必要があります。これらの状態をリストアイテムに割り当てるたびに、SetTag(...)を設定してリストアイテムの位置を保存する必要があります。クリックすると、削除する必要のあるアイテム番号を知ることができます。

  3. 削除後、リストを更新して有効にする必要があります。使用しているアダプターのタイプに応じて、アダプターをリフレッシュする方法が決まります。

これはうまくいくことでしょう。しかし、私はこれを数回同様の機能を使って行って以来、これが最も簡単な方法だと確信しています。

0

これを行うための組み込みのAPI関数はありません。

ただし、回避策はlistitemのビューでonFling関数を使用することです。あなたはこれを使ってあなたが望むものを達成できるかもしれません。

0

これは私がこの効果を実現する方法です。 ListView lvSimpleがあり、lvSimpleにonTouchListenerを追加します。これは私の作業コードです。関数FunctionDeleteRowWhenSlidingLeft()

float historicX = Float.NaN, historicY = Float.NaN; 
static final int DELTA = 50; 
enum Direction {LEFT, RIGHT;} 
... 
ListView lvSimple = (ListView) findViewById(R.id.linLayout); 
... 
lvSimple.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     // TODO Auto-generated method stub 
     switch (event.getAction()) 
     { 
      case MotionEvent.ACTION_DOWN: 
      historicX = event.getX(); 
      historicY = event.getY(); 
      break; 

      case MotionEvent.ACTION_UP: 
      if (event.getX() - historicX < -DELTA) 
      { 
       FunctionDeleteRowWhenSlidingLeft(); 
       return true; 
      } 
      else if (event.getX() - historicX > DELTA) 
      { 
       FunctionDeleteRowWhenSlidingRight(); 
       return true; 
      } break; 
      default: return false; 
     } 
     return false; 
    } 
}); 

我々は左にスライドするときときFunctionDeleteRowWhenSlidingRight、呼び出している - 右にそれぞれ。この関数では、アニメーションのペーストコードが必要です。

ps。私は悪い英語のために申し訳ありません。常に喜んで助けてください。

関連する問題