2015-04-15 8 views
6

Mam 6 oddzielnych obrazów z przezroczystym tłem. W jaki sposób można umieścić wszystkie te obrazy razem jak guziki, jak:Tworzenie niestandardowych przycisków kształtów, które nakładają się na siebie w Androidzie

enter image description here

Z tego co czytałem Chyba muszę korzystać układ ramowy, aby mieć przycisków pokrywających.

Potrzebuję, aby każdy kolor był oddzielnym przyciskiem po kliknięciu.

Aktualizacja: Zrobiłem demo i sprawdziłem, czy nie jest przezroczysty w metodzie onclick , jednak po kliknięciu czerwonego obszaru w pobliżu przecięcia między kolorem czerwonym i niebieskim nie oznacza to, że czerwony przycisk jest kliknięty z powodu nakładającego się widoku. Proszę pomóż!

https://www.dropbox.com/s/fc98nnnfbrtdh82/Photo%20Apr%2016%2C%202%2002%2013.jpg?dl=0

public boolean onTouch (Zobacz v, wydarzenie MotionEvent) {

         int eventPadTouch = event.getAction(); 
            int iX = (int)event.getX(); 
            int iY = (int)event.getY();   
            switch (eventPadTouch) { 

             case MotionEvent.ACTION_DOWN: 

              if (iX>=0 & iY>=0 & iX<TheBitmap.getWidth() & iY<TheBitmap.getHeight()&TheBitmap.getPixel(iX,iY)!=0) { 
               if (TheBitmap.getPixel(iX,iY)!=0) { 
                Toast.makeText(getApplicationContext(),"clicked blue",Toast.LENGTH_LONG).show(); 

               } 
              } 
              return true; 
            } 

            return false; 
           } 
          } 
+0

Czy masz jakiś kod, który wypróbowałeś? To pomogłoby ludziom w odpowiedzi na twoje pytanie. –

+0

Nie mam czasu, aby wymyślić i napisać odpowiedź, ale wyszukuję w Google hasło "android non rectangular buttons". Stackoverflow pytania tam wskażą ci w dobrym kierunku. Ponieważ wszystkie przyciski mają różne kolory, jedną z myśli, która przychodzi do głowy, jest uzyskanie koloru poniżej zdarzenia OnTouch. – Suragch

Odpowiedz

0

zawsze można użyć RelativeLayout jako owijki, a następnie dodać przyszłych przyciski jako dzieci, i można ustawić je na zakładka.

Na przykład

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 
    * 
    * 
    * 
</RelativeLayout> 

można następnie umieścić ImageViewButton wartość S (lub S) za pomocą trasowania/marginesów/współrzędnych.

Mam nadzieję, że to pomaga.

+0

dziękuję, utworzyłem 2 przyciski testowe, które nakładają się na siebie, jakkolwiek kliknięcie nakładającego się obszaru (na przykład Jeśli kliknę czerwony obszar, który znajduje się w pobliżu niebieskiego obszaru, nic się nie dzieje, ponieważ nadal znajduje się w prostokątnym obszarze niebieskiego kształtu. Czy wiesz, jak mogę to naprawić? –

2

Trzeba użyć względny układ umieścić obraz tła przy użyciu ImageView tak:

activity_layout.xml

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <ImageView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/bg"/> 
</RelativeLayout> 

potem trzeba createa oddzielna pliku xml wewnątrz rozciągliwej, która określa, jak każdy kształt najdokładniej przeczytać więcej na ten temat tutaj: http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape

próbka shapefile xml byłoby tak

odkształcalne/myshape1.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" > 

<stroke 
    android:width="2dp" 
    android:color="#FFFFFF" /> 

<corners android:radius="5dp" /> 

<gradient 
    android:angle="270" 
    android:centerColor="#6E7FFF" 
    android:endColor="#142FFC" 
    android:startColor="#BAC2FF" /> 
</shape> 

Wreszcie po utworzeniu wszystkich kształtów można dodać je do pliku activity_layout.xml jak ten:

<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     <ImageView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="@drawable/bg"/> 


     <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="80dp" 
     android:layout_margin="20dp" 
     android:background="@drawable/myshape1" 
     android:orientation="vertical" 
     android:padding="5dp" > 


</RelativeLayout> 

upewnić, że kształty tworzone są tak przejrzyste, jak możliwe i dołączyć do nich procedury obsługi onClick, aby wykonać przypisane zadania.

EDIT:

podstawie Twojego komentarza, że ​​istnieje inny sposób to zrobić poprzez nadpisanie słuchacza OnTouch, uchwycić piksel z bitmapy i określić jego kolor.

imageView.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN){ 
       ImageView imageView = (ImageView) v; 
       Bitmap bitmap =((BitmapDrawable)imageView.getDrawable()).getBitmap(); 
       int pixel = bitmap.getPixel(event.getX(),event.getY()); 
       int redValue = Color.red(pixel); 
       int blueValue = Color.blue(pixel); 
       int greenValue = Color.green(pixel); 
//Now that you know the color values you can decide on what you want to do based on the color combination. 
     } 
     return true; 
    } 
}); 
+0

co sugerujesz to, że powinienem narysować 6 kształtów na powyższym obrazku? Większość ppl sugeruje zlokalizowanie koloru bitmapy, ale dla każdego obrazu mam również press_state_image po naciśnięciu, więc nie mogę tego zrobić :(( –

+0

@kellyrose zaktualizowałem moją odpowiedź, aby spróbować odpowiedzieć na problem z bitmapą koloru – Tarek

+0

, więc nie muszę już tworzyć kształtu? Kolor jest gradientem, nie całkowicie czerwony lub niebieski, więc używam bitmapy bitmap = BitmapFactory.decodeResource (getResources(), R.drawable.YOUR_IMAGE_ID) to w głównym działaniu, aby uzyskać wynik, ale aplikacja nadal się zawiesza –

Powiązane problemy