2010-12-11 125 views
9

我想拖拽n拖放在android 2.X上的图像上的文本视图请看下面的图片。 alt text在android中拖拽n拖放textview

这里,“蓝色”代表ViewGrop,“白色”代表ImageView,图像设置在ImageView上。 写成“Fashion”的文本是一个TextView.This是我如何实现结构。现在我想让用户选择TextView并将其拖动到图像的任何部分,然后将其放在图像上的所需位置。

截至现在为参考我试图引用下面的网址,但每当我使用TextView而不是Button时,事情变得异常。

link text

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

+0

如果您真的提出问题,为您的问题得到答案要容易得多。 – CommonsWare 2010-12-11 19:27:39

+0

哦,明白了,我只是要求一张路线图 – Hunt 2010-12-11 20:10:02

回答

8

取而代之,请尝试将您的ImageView作为画布绘制。

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

从这里,你可以创建自己的位图和之后的TouchEvent重新绘制。下面的代码片段包含在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; 
    } 
}); 

正如你所看到的,听者会自动更新你的形象,当它被触及,文本将按照用户的手指。由于您使用的是位图作为画布,如果您的应用程序想要具有这种功能,您还可以添加对保存/加载图像的支持。

编辑:如果您从redrawImage()中移动第1-3行并将它们放置在其他位置,将这些对象设置为全局对象,它可能更具性能友好性。我会让你修补它。

+0

我需要回收任何东西,因为位图不断地在这里被绘制出来吗? – Hunt 2010-12-12 12:53:39

+0

是否可以使用TextView而不是canvas.drawText,因为与DrawText相比,Text的质量要好得多。 – Hunt 2010-12-12 14:02:02

+1

问题1:看到我编辑的答案,你应该把这些对象移到其他地方。问题2:使用Canvas.drawText()可以实现完全一样的外观。尝试使用'Paint.setAntialiasing()' – Snailer 2010-12-12 20:54:57