2010-04-06 24 views
7

Android geliştirmeye yeni başladım, sadece doküman okuyarak ve API'lerini deniyorum. ImageView, bir invalidate (Rect) çağrısı sonrasında içeriğinin sadece içeriğinin bir bölümünü nasıl çizdiğini karıştırdı. Ben ImageView.java kontrol ettim ImageView, invalidate (Rect) çağrıldığında içeriğinin bir bölümünü nasıl yeniden çiziyor?

, onDraw'da (Tuval) hariç başka hiçbir çizim yöntemi buldum ama görünümün görünür sınır beyound yalnızca onDraw (Tuval) sadece çekilebilir kesti. View.invalidate (Rect) uygulamasının da okumasını okudum, bu işlevin anahtarının mParent.invalidateChild (this, r) öğesini çağırdığını düşünüyorum; Ancak, ebeveyn görünümü verilen Rect içindeki çocuğun nasıl çizileceğini bilmediğini düşünüyorum, sonunda çocuğun bir yöntemini boyamak için çağırması gerekiyor.

Kodların bu bölümünü araştıran var mı? Bana bazı rehber verir misiniz?

cevap

1

Bu kodun View sınıfında olduğunu tahmin ediyorum.

Google Grup'ta Romain Guy'ın iki ilginç cevabı var.

+0

-1. İçeriğinin bir kısmı burada daha iyi olurdu. –

+1

+1 çünkü linkler ölü değil ... Ben sadece onları test ettim. Bununla birlikte, içerik eklemenin bu gibi durumlarda yapılması iyi bir şey olduğuna katılıyorum. – Justin

0

bence J2me, tüm beraberlik kod donanım (ekran) doğrudan çizmek değil sadece tuval gibi görünüm çizmek, sadece bir tampona çizmek android veya çekilebilir veya bir şey. View.invalidate (Rect) olarak adlandırdığımız zaman, sistem görüntüyü tamponun (veya çekilebilir) donanımına (ekran) kopyalayın.

3

Toplayabildiğim kadarıyla iki optimizasyon var. Birincisi, eğer çocuk bir görüş grubuysa, sadece bu grubun çocukları geçersiz kılınan bölgeyle kesişen yeniden çizilir. Ayrıca, tuval bu rektin sınırlarına kadar kırpılır. Bu, daha az pikselin veriyolu üzerinden çerçeveleyiciye karıştırılması gerektiği anlamına gelir ve çekiliş işlemleri tamamen kırpılabilir.

Bu bir yarı eğitimli tahmintir. Kaynağı birkaç ay önce gözden geçirdim ve ViewGroup olayından oldukça eminim. İkincisi, onDraw'da kırpma işlemini geçersiz kılarak ve her şeyi yeniden çizip girmediğini kontrol ederek test edilebilir. Her iki bağlantıda olduğu gibi

+0

Ben android için acemi değilim ve burada bir sorum var http://stackoverflow.com/questions/21027199/am-i-invalidating-the-entire-screen-on-every-call Mümkünse lütfen cevap verin . – Kraken