2015-04-15 11 views
6

Saydam arka planı olan 6 ayrı resmim var. Ben örtüşen düğmeleri sahip olmak için Çerçeve Düzeni kullanmak zorunda tahmin okumak kadarıylaAndroid'de birbirine geçen özel şekil düğmeleri nasıl yapılır

enter image description here

: Nasıl gibi, düğmeler gibi hep birlikte bu görüntüleri koyabilirsiniz.

Her rengin tıklandığında ayrı bir düğüme ihtiyacım var.

Güncelleme: Bir demo yaptım ve onclick yöntemi 'da şeffaf olup olmadığını kontrol ettim, ancak kırmızı ile mavi arasındaki kesişme noktasının yanındaki kırmızı alana tıkladığımda, kırmızı düğmenin üst üste binen görünümden dolayı tıklanmadığını kaydetmediğimi belirtmem. Lütfen yardım et!

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

kamu boolean onTouch (Görünüm v MotionEvent olay) {

         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

Denediğiniz bir kodunuz var mı? Bu, sorularınızı cevaplamada insanlara yardımcı olur. –

+0

Bir cevap bulmak ve yazmak için zamanım yok ama "android non dikdörtgen düğmeler" için bir google araması yapın. Buradaki stackoverflow soruları size doğru yönde işaret edecektir. Tüm düğmeleriniz farklı renkler olduğundan, akla gelen bir düşünce, rengi bir onTouch olayının altına almaktır. – Suragch

cevap

0

Her zaman bir sarıcı olarak RelativeLayout kullanmak ve daha sonra çocuklar gibi gelecek düğmeleri ekleyin ve bunları konumlandırabilirsiniz olabilir üst üste gelmek. Örneğin

: Daha sonra hizalama/kenar/koordinatlarını kullanarak ImageView s (ya da Button s) pozisyon olabilir

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

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

.

Yardım edin.

activity_layout.xml siz her şeklini tanımlayan çekilebilir içine ayrı xml dosya yaratırsın gerek sonradan

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

:

+0

teşekkürler, birbiriyle örtüşen 2 test butonunu, örtüşen alanı ne zaman tıklattığımı (örneğin, mavi alanın yakınında bulunan kırmızı bölgeyi tıklarsam, hala mavi şeklin retangular alanında olduğu için hiçbir şey olmamıştım) oluşturdum. Bunu nasıl düzeltebilirim biliyor musunuz? –

2

Böyle ImageView kullanarak bir arka plan resmi yerleştirmek için göreceli bir düzen kullanmak gerekir mümkün olduğunca yakından buradan daha fazla okuyun: http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape

örnek bir şekil xml dosyası bu

gibi olurdu

çekilebilir/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> 

Nihayet bu gibi activity_layout.xml dosyasına bunları ekleyebilir tüm şekiller oluşturduktan sonra:

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

oluşturulan şekiller olduğunca şeffaf olduğundan emin olun Mümkün ve onClick işleyicilerini atanan görevleri yapmak için onlara ekleyin.

DÜZENLEME: Yorumlarınız dayanarak

, OnTouch dinleyici geçersiz kılarak bunu yapmanın başka bir yolu yoktur, bitmap piksel yakalamak ve rengini belirler.

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

önerdiğiniz şey, yukarıdaki resimde 6 şekil çizmem gerektiğidir? Çoğu ppl, bitmap rengini bulmayı önerir, ancak her görüntü için, basıldığında bir press_state_image değeri de vardır, yani bunu yapamazsınız :(( –

+0

@kellyrose Bitmap renk problemini yanıtlamaya çalışmak için cevabımı güncelledim – Tarek

+0

böylece artık şekil oluşturmak zorunda değilim? Renk degrade, tamamen kırmızı veya mavi değil, bu yüzden Bitmap bitmap kullanıyorum = BitmapFactory.decodeResource (getResources(), R.drawable.YOUR_IMAGE_ID) ana aktivite bu rescore elde etmek için ama uygulama çökmesine neden olur –

İlgili konular