2016-03-08 42 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(); 
}