2012-09-04 18 views
7

Bu beş düğme gibi bir düğmeye sahip olmak istiyorum, bir düğme diğer dört düğmeyle çevrili. Sadece bu gibi:Yuvarlatılmış düğmeler

enter image description here

Ben Android ile biz sadece bu yüzden kare tip görüşlere sahip olabilir biliyorum nasıl bunu yapmak mümkün olurdu? OpenGl falan mı? İlgili bir şeyle ilgili herhangi bir bağlantısı var mı? Temelde birbirine yakın olan kavisli düğmeler istiyorum.

cevap

3

Tahminimce, günün sonunda bunu özel bir görünümde yapmak daha kolay olacak.

Ancak stok görünümlerini kullanmak isterseniz, aşağıdakileri öneririm. İlk önce, 2x2 ızgaradaki dört dış düğmeyi düzenlemek için RelativeLayout kabı kullanın. Ardından orta düğmeyi ortadaki ızgarayla çakışacak şekilde konumlandırın. Ortadaki düğmeyi, etraftaki dört düğmeden daha yüksek bir Z'ye (kullanıcıya daha yakın) yerleştirin. Ardından, istediğiniz gibi görünmelerini sağlamak için, düğme görüntülerinin bir parçası olarak saydamlığı kullanın. O zaman (umarım) denemelisin. Z sırası doğruysa, ortadaki düğme, diğer dört düğmeden birine geçecek olan muslukları yakalar.

Bu aslında çalışmaz, çünkü ortadaki düğme karesi çevreleyen karelere girecektir. Eğer işe yarayıp yaramadığını bilmiyorum, fakat ortadaki düğmeyi başka bir düğme “parçaları” ile değiştirmeyi deneyebilirsiniz. Izgara, merkez düğme görüntüsünün ızgara hücresiyle çakıştığı durumlar dışında boş konumlara sahip olacaktır. Dış düğme görüntülerine izin vermemek için bunu yeterince iyi yapmalısınız.

DÜZENLEME:

O belki TouchDelegate nesne grubuna sahip bu yapabileceğini aklıma geldi. Düğmeleri ilk başta açıkladığım gibi düzenlersiniz, ancak yalnızca ana kapsayıcıyı tıklanabilir yapın. Dokunun koordinatlarının altında hangi tuşun (varsa) olduğunu bulmak için beş TouchDelegate s kullanır. Ne yazık ki, TouchDelegate sadece başladığımız yeri terk eden Rect hit bölgeleriyle çalışmaktadır. Ancak, source of TouchDelegate kodunu uygulayabilir ve sadece Rect yerine bir tür genel şekil sınıfını kabul eden kendi sürümünüzü tanımlayabilirsiniz. (Şekil sınıfı, bir vuruşu test etmek için Rect.contains() eşdeğerine sahip olmalıdır. Android'de yerleşik hiçbir şey yoktur, ancak sahip olduğunuz belirli şekiller için kendi sınıflarınızı kolayca yazabilirsiniz.)

Kodu basitleştirebilirsiniz. isabet ve delegasyon mantığını doğrudan ana kapsayıcı görünümüne yerleştirerek biraz, ancak sanırım kapsayıcıdan olay işlemeyi ayıran yeniden kullanılabilir bir temsilci sınıfına sahip olmak daha temiz olurdu. Yine, bu

bool insideMyAwsomeShapeButton(int mouse_x,int mouse_y) { 
     if get_image_pixel_color_at_pos(mouse_x,mouse_y) == rgbcolor(1,0,0) 
    { 
      return true; 
    } 

      return false; } 

: Sadece kırmızı düğmenin karşı piksel renk kontrolü, böyle bir şey yapmak, yayınlanan görüntü gibi, tamamen kırmızı düğmesi:

+0

+ Daire ve yaylar arasındaki mesafeyi r * sqrt (2) - r olarak tutarsa, Merkez başkalarına yönelik musluklar alamaz. Genel olarak overkill. – mehmetminanc

+0

Hmm, düğmelerin birbirine çok yakın olmasını istiyorum, böylece aralarında çok büyük bir mesafe olmam, 2D Grafik gibi bir şey yapmam gerekecek mi? – FabianCook

+0

@SmartLemon - Özel görünüm rotasına giderseniz, [Canvas] (http://developer.android.com/reference/android/graphics/Canvas.html) nesnesi kullanacaksınız.Başlamak için [Özel Görünümler Oluşturma] (http://developer.android.com/training/custom-views/index.html) ile ilgili eğitimi öneririm. Ayrıca [Özel Bileşenler] Kılavuzu konusunu okuyun (http://developer.android.com/guide/topics/ui/custom-components.html). –

1

Örneğin maske rengini kullanabilirsiniz sadece bir düşünce, kontrol piksel rengi gibi, görevi yapmak için android üzerinde belirli bir api bulmak zorunda.

+0

Hmm, bu bakmaya değer bir şey gibi görünüyor, ama bir Mevcut ekranın görüntüsünü oluşturmanın yolu? – FabianCook

İlgili konular