2015-04-15 10 views
6

Ho 6 immagini separate con uno sfondo trasparente. Come posso mettere tutte quelle immagini insieme come pulsanti, come:Come creare pulsanti di forma personalizzati che si sovrappongono l'un l'altro in Android

enter image description here

Da quello che ho letto mi sa che devo utilizzare layout telaio in modo da avere i pulsanti che si sovrappongono.

Ho bisogno che ogni colore sia un pulsante separato quando si fa clic.

Aggiornamento: ho creato una demo e controllo la trasparenza in metodo onclick tuttavia quando faccio clic sull'area rossa vicino all'intersezione tra rosso e blu, non registro che il pulsante rosso è clic a causa della vista sovrapposta. Per favore aiuto!

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

pubblico onTouch booleana (Visualizza v, evento 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

Avete qualche codice che avete provato? Ciò aiuterebbe le persone a rispondere alla tua domanda. –

+0

Non ho tempo per capire e scrivere una risposta, ma fare una ricerca su google per "pulsanti Android non rettangolari". Le domande sullo stackover vi porteranno nella giusta direzione. Poiché tutti i pulsanti sono di colori diversi, un pensiero che viene in mente è ottenere il colore sotto un evento onTouch. – Suragch

risposta

0

È sempre possibile utilizzare RelativeLayout come un wrapper e quindi aggiungere i pulsanti futuri figli, e li si può posizionare a sovrapposizione.

Ad esempio:

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

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

È quindi possibile posizionare ImageView s (o Button s) usando allineamenti/margini/coordinate.

Spero che aiuti.

+0

grazie, ho creato 2 pulsanti di test che si sovrappongono a ogni orther, come mai quando si fa clic sull'area sovrapposta (ad esempio, se faccio clic sull'area rossa che si trova vicino all'area blu, non accade nulla poiché è ancora nell'area retangolare della forma blu. Sai come posso risolverlo? –

2

È necessario utilizzare un layout rispetto ad inserire un'immagine di sfondo utilizzando ImageView come questo:

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> 

poi è necessario createa file XML separato all'interno drawable che definisce ogni forma di vicino possibile saperne di più qui: http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape

un file XML di esempio di forma sarebbe stato così

0.123.

drawable/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> 

Finalmente dopo aver creato tutte le forme è possibile aggiungere al vostro file activity_layout.xml in questo modo:

<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> 

fare in modo che le forme create sono trasparenti come possibile e allegare i gestori onClick a loro per eseguire le attività assegnate.

EDIT:

Sulla base della sua commento, c'è un altro modo per fare questo sovrascrivendo l'ascoltatore OnTouch, catturare il pixel dal bitmap e determinare il suo colore.

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

quello che suggerisci è che dovrei disegnare 6 forme sull'immagine qui sopra? La maggior parte di ppl suggerisce l'individuazione del colore bitmap, ma per ogni immagine ho anche un press_state_image quando premuto, quindi non posso farlo :(( –

+0

@kellyrose ho aggiornato la mia risposta per provare a rispondere al problema del colore bitmap – Tarek

+0

quindi non devo più creare la forma? Il colore è sfumato, non completamente rosso o blu, quindi uso Bitmap bitmap = BitmapFactory.decodeResource (getResources(), R.drawable.YOUR_IMAGE_ID) nell'attività principale per ottenere il rescore ma l'app continua a bloccarsi –

Problemi correlati