2010-12-11 17 views
9

Chcę przeciągnąć n upuścić widok tekstu na obrazie w systemie Android 2.Xprzeciągnij n upuść widok tekstowy w Androidzie

Proszę spojrzeć na to zdjęcie poniżej. alt text

Tutaj "niebieski" kolor reprezentuje ViewGrop, "Biały" to ImageView, a obraz jest ustawiony na ImageView. tekst napisany "Moda" to TextView. W ten sposób zaimplementowałem strukturę. Teraz chcę pozwolić użytkownikowi wybrać TextView i przeciągnąć go do dowolnej części obrazu, a następnie upuścić go nad obrazem w pożądanej pozycji.

Od tego momentu próbowałem odnieść się do następującego adresu URL, ale ilekroć korzystam z funkcji TextView zamiast przycisku, sytuacja staje się nienormalna.

link text

Czy ktoś może dać mi mapę drogową lub przykładu, aby to zrobić?

+0

O wiele łatwiej jest uzyskać odpowiedzi na swoje pytania, jeśli faktycznie zadasz pytanie. – CommonsWare

+0

ohh to mam, ja tylko pytam o mapę drogową – Hunt

Odpowiedz

8

Zamiast tego spróbuj ustawić swój obraz jako obraz, aby go narysować.

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

Stąd można utworzyć własną bitmapę i ponownie wyciągnąć go po TouchEvent. Poniższy fragment zawiera niezbędne obejście błędu w 2.1 (lub 2.2, nie pamiętam):

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); 
} 

Tutaj stworzyliśmy płótna, który ma już swoje zdjęcie jako tło tekstu i farb przy zmiennej x i y. Teraz wystarczy ustawić OnTouchListener:

CanvasView.setOnTouchListener(new OnTouchListener(){ 

    public boolean onTouch(View v, MotionEvent e) { 

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

Jak widać, słuchacz automatycznie aktualizuje swój obraz, gdy jest ona dotknęła, a tekst będzie podążać palec użytkownika. Ponieważ jako płótno używasz Bitmapy, możesz również dodać obsługę zapisywania/wczytywania obrazu, jeśli aplikacja chce mieć tego rodzaju funkcjonalność.

Edit: To może być bardziej przyjazne wydajność w przypadku przeniesienia linii 1-3 z redrawImage() i umieścić je gdzie indziej, ustalającej te obiekty jako globalnych obiektów. Pozwolę ci się tym zajmować.

+0

Czy muszę poddawać recyklingowi wszystko, aby bitmapa była tu ciągle przyciągana? – Hunt

+0

czy można użyć TextView zamiast canvas.drawText, ponieważ jakość tekstu jest znacznie lepsza w porównaniu do metody drawText. – Hunt

+1

Pytanie 1: zobacz moją zredagowaną odpowiedź, powinieneś przenieść te obiekty w inne miejsce. Pytanie 2: możesz uzyskać dokładnie taki sam wygląd z Canvas.drawText(). Spróbuj użyć 'Paint.setAntialiasing()' – Snailer