Android - 按住预览

时间:2016-03-08 23:15:23

标签: android

我有一个包含一些项目的列表视图,我希望允许用户通过按住项目来预览特定项目的数据。我希望只要用户按下,预览窗口/弹出窗口就会保持显示状态。

我正在尝试在IOS和Instagram中使用相同的预览功能

我已经在longpress上实现了但不确定为获得理想结果而展示的最佳内容

 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;
                }
            });

有关如何实施该方法或实施该方法的最佳方法的任何提示?

4 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

请参阅以下有关如何使用回收者视图处理长按的答案:RecyclerView onClick

完成后,您可以显示布局以显示数据。

答案 2 :(得分:0)

检查出来......

在长按一下监听器上实现一个监听器

how to implement a long click listener on a listview

然后启用隐藏视图的可见性。在这样做的同时,请查看此链接,了解如何启用预览窗格的动态位置

How can I dynamically set the position of view in Android?

答案 3 :(得分: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()。< / p>