2010-12-11 153 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