在android中拖放textview

Posted

技术标签:

【中文标题】在android中拖放textview【英文标题】:drag n drop textview in android 【发布时间】:2011-05-24 00:38:28 【问题描述】:

我想在 android 2.X 中将文本视图拖放到图像上

请看下面这张图片。

这里,“蓝色”颜色代表 ViewGrop ,“白色”是 ImageView 并且图像设置在 ImageView 上。 写“时尚”的文字是一个TextView。这就是我实现结构的方式。现在我想让用户选择 TextView 并将其拖动到图像的任何部分,然后将其放在图像上所需的位置。

到目前为止,作为参考,我尝试引用以下 url,但每当我使用 TextView 而不是 Button 时,事情就会变得异常。

link text

谁能给我完成它的路线图或示例?

【问题讨论】:

如果您真正提出问题,则更容易获得问题的答案。 哦,明白了,我只是要一张路线图 【参考方案1】:

相反,尝试将您的 ImageView 作为画布进行绘制。

ImageView CanvasView = (ImageView) findViewById(R.id.fashion_pic)

您可以从这里创建自己的位图并在 TouchEvent 之后重新绘制它。以下 sn-p 包含针对 2.1(或 2.2,我不记得)中的错误的必要解决方法:

public void redrawImage() 

    Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.fashion_pic);
    Bitmap proxy = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), Config.ARGB_8888);
    Canvas c = new Canvas(proxy);

    //Here, we draw the background image.
    c.drawBitmap(bm, new Matrix(), null);

    //Here, we draw the text where the user last touched.
    c.drawText("Fashion", someGlobalXvariable, someGlobalYvariable, somePaint);

    CanvasView.setImageBitmap(proxy);

在这里,您创建了一个画布,该画布已经将您的图片作为背景,并在 x 和 y 变量处绘制文本。现在,只需设置一个 OnTouchListener:

CanvasView.setOnTouchListener( new OnTouchListener()

    public boolean onTouch(View v, MotionEvent e) 

        someGlobalXvariable = e.getX();
        someGlobalYvariable = e.getY();
        redrawImage();
        return true;
    
);

如您所见,当您触摸它时,侦听器会自动更新您的图像,并且文本将跟随用户的手指。由于您使用位图作为画布,因此如果您的应用想要具有这种功能,您还可以添加对保存/加载图像的支持。

编辑:如果您将第 1-3 行从 redrawImage() 移到其他位置,将这些对象设置为全局对象,则可能对性能更友好。我会让你修补的。

【讨论】:

我需要回收任何东西,因为这里不断地绘制位图吗? 是否可以使用 TextView 代替 canvas.drawText ,因为 Text 的质量比 drawText 好很多。 问题 1:查看我编辑的答案,您应该将这些对象移到其他地方。问题 2:您可以使用 Canvas.drawText() 实现完全相同的外观。尝试使用Paint.setAntialiasing()

以上是关于在android中拖放textview的主要内容,如果未能解决你的问题,请参考以下文章

在“ListView”中拖放

在 NSView 中拖放

在 Quasar 中拖放文件

在 Tkinter 中拖放?

在 UITextView 中拖放时显示文本光标

需要在icarousel中拖放视图