【问题标题】:Android: Draggable Toast, Or Alternative?Android:可拖动吐司还是替代品?
【发布时间】:2010-12-15 00:34:49
【问题描述】:

我在画布上绘制了许多位图,并使用 MotionEvents 让我拖动它们。

当每个项目被按下时,我想显示一个 Toast 或类似 Toast 的迷你信息面板,它跟踪在 ACTION_MOVE 期间被拖动的位图的移动。 “Toast”将出现在 ACTION_DOWN 上,并在 ACTION_UP 上消失。

使用 Toast 的问题是我必须给它一个持续时间,而且,一旦它显示,我就不能改变它的位置。除非我可以为每个 ACTION_MOVE 杀死 Toast,并立即在当前坐标处显示一个新的? (抱歉,此时大声思考,无法到达我的开发机器进行测试...)

我不知道还有什么其他选择可以实现这一目标,我非常感谢社区的建议。

【问题讨论】:

    标签: android toast


    【解决方案1】:

    希望这会有所帮助,只是把它整理好,甚至可以编译!

    private boolean mDragging = false;
    private float mTouchX = 0, mTouchY = 0;
    private Paint mTextPaint = new Paint();//need to set this up in onCreate!
    
    public boolean onTouchEvent(MotionEvent event)
    {
      mTouchX = event.getX();
      mTouchY = event.getY();
    
      if(event.getAction() == ACTION_DOWN)
      {
        mDragging = true;
      }
      else if(event.getAction() == ACTION_UP)
      {
        mDragging = false;
      }
    
      return true;
    }
    
    protected void onDraw (Canvas canvas)
    {
      /* Put all your bitmap drawing here. */
    
      /* Draw some info text on top of everything else. */
      if(mDragging)
      {
        String text = mTouchX + ", " + mTouchY;
        canvas.drawText(mTouchX, mTouchY + 50, text, mTextPaint);
      }
    }
    

    【讨论】:

    • 谢谢乔希,我会尽快试试这个。然而,我想在Touch 上显示的信息比单个文本更复杂。它实际上是一组被触摸/拖动的对象的统计数据。所以,我想我需要创建某种自定义视图,并绘制它而不是 drawText。这有多复杂?
    • 您不需要创建自定义视图。您可以使用 Canvas 绘图方法来绘制星星和其他所有需要的东西。
    • 好的,我试试看。谢谢大家。
    【解决方案2】:

    由于您已经提到的原因,Toast 不适合这种情况。最好在 Canvas 上定义一个区域并使用 drawText 在那里绘制消息字符串。将其放在 onDraw 方法中,并在需要更新文本或留言板位置时调用 invalidate。

    【讨论】:

    • 非常感谢您的回答,非常有帮助。乔希的回答也是如此,我想在他的回答下在 cmets 中进一步讨论。
    猜你喜欢
    • 2015-04-23
    • 2012-03-07
    • 1970-01-01
    • 2013-10-21
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多