2014-05-01 24 views
10

jestem w stanie wyciągnąć z powrotem na zlecenie grunt do pliku xml przy użyciu Shapeniestandardowy kształt podczas rozmowy w Android za pomocą pliku xml

ale jak dodać łuk lub CURV w określonym miejscu.

enter image description here

+1

Być może prostszym rozwiązaniem byłoby użycie obrazu z 9 łatkami. –

+0

zakręt? łuk? o czym mówisz? – pskink

+2

Myślę, że szukasz [Chat- Bubble] (http://adilsoomro.blogspot.in/2012/12/android-listview-with-speech-bubble.html). – Kedarnath

Odpowiedz

2

Bo masz ten łuk lub CURV należy utworzyć niestandardowy jpg.

Ale można skorzystać z corners i mają poniżej:

Test

+0

Dziękuję za odpowiedź. Zrobiłem to już za pomocą obrazu .9patch. –

+1

Po prostu poszedłem za tym http://adilsoomro.blogspot.in/2012/12/android-listview-with-speech-bubble.html –

1

enter image description here

make 9patch obraz jak to tak, że jeśli w partii rozmowa tekstu wówczas również można regulować sobie, a także nie rozciągnąć ani nie skompresować z krzywej.

nadzieję, że pomoże Ci

+0

Dziękuję, już to zrobiłem. Działa dla dużego tekstu. –

+0

Czy możesz pomóc w zakupie aplikacji Amazon? Czy zdajesz sobie sprawę z develepmentu Amazon za pomocą Androida SDK? –

+0

Przepraszam, nie wiem o tym .. –

4

W mojej bibliotece Facebook Like Button I wdrożone custom Path aby osiągnąć ten cel.

Istnieje możliwość, aby określić położenie markera gdzie chcesz:

enter image description here enter image description here

kod z source:

import android.graphics.Path; 
import android.graphics.RectF; 

public class CalloutPath extends Path { 
    public static final int MARKER_NONE = 0x0; 
    public static final int MARKER_LEFT = 0x1; 
    public static final int MARKER_TOP = 0x2; 
    public static final int MARKER_RIGHT = 0x4; 
    public static final int MARKER_BOTTOM = 0x8; 
    public static final int MARKER_ALL = 0xf; 

    private final RectF oval = new RectF(); 

    /** 
    * @param m marker 
    * @param w width 
    * @param h height 
    * @param s stroke thickness 
    * @param r corners radius 
    */ 
    public void build(int m, float w, float h, float s, float r) { 
     int fl = factor(m, MARKER_LEFT); 
     int ft = factor(m, MARKER_TOP); 
     int fr = factor(m, MARKER_RIGHT); 
     int fb = factor(m, MARKER_BOTTOM); 

     float x0 = s + 0f; 
     float x1 = s + r * fl; 
     float x2 = s + r + r * fl; 
     float x3 = w/2f - r; 
     float x4 = w/2f; 
     float x5 = w/2f + r; 
     float x6 = w - 1f - s - r - r * fr; 
     float x7 = w - 1f - s - r * fr; 
     float x8 = w - 1f - s; 
     float y0 = s + 0f; 
     float y1 = s + r * ft; 
     float y2 = s + r + r * ft; 
     float y3 = h/2f - r; 
     float y4 = h/2f; 
     float y5 = h/2f + r; 
     float y6 = h - 1f - s - r - r * fb; 
     float y7 = h - 1f - s - r * fb; 
     float y8 = h - 1f - s; 

     reset(); 

     moveTo(x1, y2); 

     oval.set(x2 - r, y2 - r, x2 + r, y2 + r); 
     arcTo(oval, 180f, 90f); 

     if (ft != 0) { 
      lineTo(x3, y1); 
      lineTo(x4, y0); 
      lineTo(x5, y1); 
     } 

     lineTo(x6, y1); 

     oval.set(x6 - r, y2 - r, x6 + r, y2 + r); 
     arcTo(oval, 270f, 90f); 

     if (fr != 0) { 
      lineTo(x7, y3); 
      lineTo(x8, y4); 
      lineTo(x7, y5); 
     } 

     lineTo(x7, y6); 

     oval.set(x6 - r, y6 - r, x6 + r, y6 + r); 
     arcTo(oval, 0f, 90f); 

     if (fb != 0) { 
      lineTo(x5, y7); 
      lineTo(x4, y8); 
      lineTo(x3, y7); 
     } 

     lineTo(x2, y7); 

     oval.set(x2 - r, y6 - r, x2 + r, y6 + r); 
     arcTo(oval, 90f, 90f); 

     if (fl != 0) { 
      lineTo(x1, y5); 
      lineTo(x0, y4); 
      lineTo(x1, y3); 
     } 

     close(); 
    } 

    public static int factor(int marker, int mask) { 
     return (marker & mask) != 0 ? 1 : 0; 
    } 
} 
2

Nie trzeba to zrobić programowo, należy po prostu użyj zasobu graficznego nine patch, który tworzy idealny obraz dla Ciebie. Jeśli chcesz dowiedzieć się więcej o nine patch i jak to działa, zapoznaj się z linkami this i this.
Jak widać, ten obraz stanowi idealną bańkę czatową dla Ciebie. Już zdekompilowałem Whatsapp, Viber i wszystkie one używają obrazu nine patched do stworzenia bańki czatu. Jak widać, aplikacja Telegram używa również nine patched image, aby to osiągnąć.

Moja próbka czatu bubble zdjęcie:
enter image description here

ja też powinny wspomnieć, że nie potrzeba żadnego niestandardową ścieżkę. Jest to typowy poprawiony obraz bez żadnych modyfikacji.

Powiązane problemy