2016-10-28 20 views
2

私は閉じることができる表示を作成しようとしていますが、取り消すことができます。アイテムは、背景と前景がFrameViewの内部にあります。私はこのようなItemTouchHelper.CallbackonChildDrawをオーバーライドしています:onChildDrawは項目を点滅させます

@Override 
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, 
         float dX, float dY, int actionState, boolean isCurrentlyActive) { 
    if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { 
     if (viewHolder instanceof ItemViewHolder) { 
      ItemViewHolder holder = (ItemViewHolder) viewHolder; 

      holder.foreground.setTranslationX(dX); 
     } 
    } else { 
     super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); 
    } 
} 

すべてが動作しますが、私はこのようなユーザのアクションに基づいて、スワイプ操作を元に戻すことを試みる刚性:への実際のビューを戻すん

foreground.animate() 
      .translationX(0) 
      .setDuration(150); 

ユーザーがその項目を再びスワイプしようとすると、背景が再び表示され、何らかの理由でonChildDrawが呼び出され、dXパラメータが画面の幅よりも大きくなります。アイテムをタップすると、1秒間の背景ビューが表示され、フォアグラウンドは通常は解除されます。これをどうすれば解決できますか?

+0

問題を解決しましたか? –

+0

回答を追加しました – tofiffe

答えて

1

この解決策は、ItemTouchHelper.CallbackgetDefaultUIUtil()機能を使用することでした。作業コードは次のとおりです。

@Override 
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, 
         float dX, float dY, int actionState, boolean isCurrentlyActive) { 
    if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { 
     if (viewHolder instanceof TrackerListAdapter.ItemViewHolder) { 
      TrackerListAdapter.ItemViewHolder holder = 
        (TrackerListAdapter.ItemViewHolder) viewHolder; 

      getDefaultUIUtil().onDraw(c, recyclerView, holder.foreground, dX, dY, actionState, isCurrentlyActive); 
     } 
    } else { 
     super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); 
    } 
} 
関連する問題