2016-03-08 39 views
0

我有一個包含一些項目的列表視圖,我想允許用戶通過按住該項目預覽特定項目的數據。我希望預覽窗口/彈出窗口保持顯示,只要用戶按下。Android - 預覽按住

我想achivie在IOS相同的預覽功能和Instagram

我已經在長按實現的,但不知道什麼是最好的東西展現給獲得期望的結果

lv.setAdapter(arrayAdapter); 
      lv.setLongClickable(true); 
      lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
       @Override 
       public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
               int pos, long id) { 


        Log.v("long clicked", "pos: " +pos); 

        return true; 
       } 
      }); 

有關如何實施該方法或最佳實施方法的提示?

+0

所以,你想重新實現在Android 3D觸控? –

回答

0

參見如何處理長按與回收觀點如下回答:RecyclerView onClick

一旦你有,你可以顯示一個佈局,以顯示您的數據。

0

你可以自定義OnTouchListener添加到代表你ListView(或RecyclerView或任何給定項目的視圖)。這允許您檢測手勢何時開始(即,第一手指向下)結束(即最後一根手指向上)或被取消(例如,手勢實際上是滾動並且已被ListView攔截)。

你需要做的是將類似的代碼:

itemView.setOnTouchListener(new OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     int actionMasked = event.getActionMasked(); 
     switch (actionMasked) { 

     case MotionEvent.ACTION_DOWN: 
      // show preview 
      break; 

     case MotionEvent.ACTION_UP: 
     case MotionEvent.ACTION_CANCEL: 
      // hide preview 
      break; 

      default: 

     } 

     return true; 
    } 
}); 

編輯:您可能需要包括一些邏輯來檢測一個簡單的點擊(例如,衡量,如果整個動作持續了不長比ViewConfiguration.getTapTimeout())並致電v.performClick()

3

嗯,我正在使用與圖像回收視圖。

要顯示我使用長按聽者調用此方法的圖像:

public void publicationQuickView(Post post){ 
    View view = getLayoutInflater().inflate(R.layout.quick_view, null); 

    ImageView postImage = (ImageView) view.findViewById(R.id.ivFeedCenter); 
    ImageView profileImage = (ImageView) view.findViewById(R.id.ivUserProfile); 
    TextView tvUsername = (TextView) view.findViewById(R.id.txtUsername); 
    tvUsername.setText(post.user.name); 

    Picasso.with(this).load(post.picture).priority(Picasso.Priority.HIGH).noPlaceholder().into(postImage); 
    Picasso.with(this).load(post.user.picture).noPlaceholder().into(profileImage); 

    builder = new Dialog(this); 
    builder.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    builder.getWindow().setBackgroundDrawable(
      new ColorDrawable(Color.TRANSPARENT)); 
    builder.setContentView(view); 
    builder.show(); 
} 

予膨脹的佈局和注入的對話框。

要解僱我使用RecyclerView.OnItemTouchListener()這樣的對話:

rvUserProfile.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() { 
     @Override 
     public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 
      if(e.getAction() == MotionEvent.ACTION_UP) 
       hideQuickView(); 
      return false; 
     } 

     @Override 
     public void onTouchEvent(RecyclerView rv, MotionEvent event) { 
     } 

     @Override 
     public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 
     }}); 

最後:

public void hideQuickView(){ 
    if(builder != null) builder.dismiss(); 
}