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:
+ Daire ve yaylar arasındaki mesafeyi r * sqrt (2) - r olarak tutarsa, Merkez başkalarına yönelik musluklar alamaz. Genel olarak overkill. – mehmetminanc
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
@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). –