【问题标题】:Facebook Style Cross Button to remove chat head in androidFacebook Style Cross Button 删除 android 中的聊天头
【发布时间】:2014-05-06 12:31:53
【问题描述】:

我一直在开发一个 android 应用程序,我需要在其中实现聊天头功能。我已经能够创建聊天头,但无法找到一种方法来添加长按并拖动图标时出现的十字按钮。 我想知道的是那个十字图标是什么以及如何拖放它可以像聊天头本身一样覆盖在现有屏幕上。 那是另一个聊天头还是别的什么?

【问题讨论】:

  • Akash 你能分享你的代码你是如何实现这个的吗?
  • 您好 Jyomin 抱歉,该要求已被逐步淘汰,因此我目前还没有工作代码。你可以看看下面的cmets

标签: android notifications chat head


【解决方案1】:
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

//获取屏幕大小来决定你要从哪个区域拖动和移除气泡。

    Display display = mWindowManager.getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        screenWidth = size.x;
        screenHeight = size.y;

        LayoutInflater inflater = LayoutInflater.from(this);
        mChatHead = inflater.inflate(R.layout.chatheaddemo, null);
        mChatHeadImageView = (ImageView) mChatHead
                .findViewById(R.id.chathead_imageview);
        mChatHeadTextView = (TextView) mChatHead
                .findViewById(R.id.chathead_textview);
        mLayout = (LinearLayout) mChatHead
                .findViewById(R.id.chathead_linearlayout);


        final WindowManager.LayoutParams parameters = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.WRAP_CONTENT, 
                WindowManager.LayoutParams.WRAP_CONTENT, 
                WindowManager.LayoutParams.TYPE_PHONE, 
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
                PixelFormat.TRANSLUCENT 
        );

        parameters.x = 0;
        parameters.y = 50;
        parameters.gravity = Gravity.TOP | Gravity.LEFT;

        // Drag support!
        mChatHeadImageView.setOnTouchListener(new OnTouchListener() {

            int initialX, initialY;
            float initialTouchX, initialTouchY;

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

                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    initialX = parameters.x;
                    initialY = parameters.y;
                    initialTouchX = event.getRawX();
                    initialTouchY = event.getRawY();
                    mChatHeadTextView.setText("BDCS!!!");
                    Toast.makeText(getApplication(),
                            "Drag and remove!", Toast.LENGTH_SHORT)
                            .show();
                    return true;

                case MotionEvent.ACTION_MOVE:
                    mChatHeadTextView.setVisibility(View.GONE);
                    parameters.x = initialX
                            + (int) (event.getRawX() - initialTouchX);
                    parameters.y = initialY
                            + (int) (event.getRawY() - initialTouchY);
                    mWindowManager.updateViewLayout(mChatHead, parameters);
                    return true;

                case MotionEvent.ACTION_UP:

                    if (parameters.y > screenHeight * 0.8) {
                        mChatHead.setVisibility(View.GONE);
                        Toast.makeText(getApplication(), "Removed!",
                                Toast.LENGTH_SHORT).show();
                        stopSelf();
                    }

                    if (parameters.x < screenWidth / 2) {
                        mLayout.removeAllViews();
                        mLayout.addView(mChatHeadImageView);
                        mLayout.addView(mChatHeadTextView);
                        mChatHeadTextView.setVisibility(View.VISIBLE);

                    } else { // Set textView to left of image
                        mLayout.removeAllViews();
                        mLayout.addView(mChatHeadTextView);
                        mLayout.addView(mChatHeadImageView);
                        mChatHeadTextView.setVisibility(View.VISIBLE);
                    }
                    return true;

                default:
                    return false;
                }`enter code here`
            }
        });

        mWindowManager.addView(mChatHead, parameters);

这会在拖动到定义的位置后移除气泡。

【讨论】:

  • 请也分享你的chatheaddemo xml
【解决方案2】:

我从事 Tooleap SDK 的工作,该 SDK 为应用程序提供聊天头功能。 我也调查过这个问题,似乎底部的十字图标不是聊天头,而是占据整个屏幕底部三分之一的透明视图(您可以通过图标周围出现的色调注意到它)。 在该视图内部还有另一个视图,即十字图标本身。 因为视图是透明的,所以聊天头似乎显示在该视图的顶部。

【讨论】:

  • 感谢您的帮助。我将尝试创建那个十字架。那么这个视图是不是应该在实现draglistener之后调用呢?
  • 是的,您可以在 Draglistener 实现中显示该视图
  • 谢谢..应该尝试,如果它有效,应该更新代码......否则再次ping你寻求帮助?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多