Bir animasyon çizmeye çalışıyorum. Bunu yapmak için genişletilmiş Görünüm ve overDraw() yöntemini geçersiz kıldım. Beklediğim şey, onDraw() adındaki her zaman tuvalin içinde bıraktığım durumda olacağını ve bunu temizlemeyi seçebildiğimi ya da sadece bir kısmını çizebildiğimi (SurfaceView kullandığımda bu şekilde çalıştı)) ancak tuvalin geri geldiği her defasında zaten temizlendi. Temizleyemediğim bir yolu var mı? Ya da belki bir önceki durumu bir Bitmap'e kaydedersiniz, bu yüzden sadece bu Bitmap'i çizebilir ve daha sonra üstüne çekebilirim? Temel görünüm ve surfaceView arasındaki farkı görmek için numaralı bir görünüme sahip olmalısınızAndroid View.onDraw() her zaman temiz bir Tuvalete sahip
cevap
Bir yol olup olmadığından emin değilim. Ancak özel görünümlerim için her defasında herşeyi yeniden çiziyorum.(), Bir bitmap'e çizilir ve sonra da bitmap'i tuvaline çizer (sorunuzda önerdiğiniz gibi). İşte
ben
class A extends View {
private Canvas canvas;
private Bitmap bitmap;
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
if (bitmap != null) {
bitmap .recycle();
}
canvas= new Canvas();
bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap);
}
public void destroy() {
if (bitmap != null) {
bitmap.recycle();
}
}
public void onDraw(Canvas c) {
//draw onto the canvas if needed (maybe only the parts of animation that changed)
canvas.drawRect(0,0,10,10,paint);
//draw the bitmap to the real canvas c
c.drawBitmap(bitmap,
new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()),
new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()), null);
}
}
. Bir surfaceView, çizmek için özel bir katmanı vardır, ki daha önce çizdiğin şeyin kaydını tutar. Şimdi bunu temel bir Görünüm üzerinde yapmak istiyorsanız, itemized overlay for the mapview örneğindeki gibi bir dizide çizdiğiniz her öğeyi yerleştirmeyi deneyebilirsiniz. Hemen hemen aynı şekilde çalışmalıdır
Bu sayfayı gördüm. Aslında bu sayfa başlangıçta bir SurfaceView kullanmamı sağladı, ancak SurfaceView'un saydam bir arka plana sahip olmadığını buldum. ve diğer görünümlerin üstüne oturabilmek için bu widget'a ihtiyacım var. – CaseyB
sonra çekilebilir dizi deneyin? – Sephy
Modern Android'de OpenGL yoluna gitmek istiyorsanız doku görünümünü kullanabilirsiniz. – Adam
Beklentileriniz tuval olmayacak/gerçeklik :) w bıraktığınız şekilde vinç kolu yok böyle yaparız, ama bunun yerine boş. Çizilecek nesnelerden oluşan bir ArrayList (canvas.drawCircle(), canvas.drawBitmap() vb.) Oluşturabilir, ardından OnDraw() 'da ArrayList olsa da yineleyin. Grafik programlamada yeniyim ama bunu küçük çapta kullandım. Belki daha iyi bir yol var.
Tuvali oluşturursanız budur. Böylelikle, üzerinde çizilenler üzerinde tam kontrole sahip olursunuz – CaseyB
Bir Arraylist yerine: Resim kayıtlarını kaydetmek için Resim sınıfını kullanabilirsiniz. –
- 1. Her zaman eşit bir sayıya sahip GUID
- 2. HTML5 videodan tuvalete görünüm
- 3. Her öğe için aynı değere sahip bir Java dizisi bildirmenin temiz bir yolu var mı?
- 4. Android multitouch: ACTION_UP her zaman çağrılmıyor mu?
- 5. Android: Sesli komutu dinle (her zaman)
- 6. Android FaceDetector.Face Euler açıları 0 her zaman
- 7. Android ExpandableListView göstergesi/simge her zaman gergin
- 8. Temiz kodu - Ben koduna sahip Java
- 9. Android eklendi AppBarLayout her zaman üstte geliyor
- 10. android: KomşuCellInfo her zaman boş! niye ya?
- 11. Android Facedetector poz değerleri her zaman 0
- 12. IOException Android emülatörüne bir şey yüklemeye çalıştığım her zaman
- 13. Bir liste görünümünde Android progressbar her zaman belirsiz
- 14. EXTRA_PREVIOUS_SCAN_MODE her zaman Android Bluetooth için bir hata döndürüyor
- 15. BlobstoreService.getUploads her zaman NULL
- 16. MotionEvent.getPointerCount() her zaman 1
- 17. Temiz sürekli bir entegrasyon oluşturur
- 18. Her zaman bir histogramı atlatmanın bir yolu?
- 19. Adım Sayacı: her zaman açık?
- 20. O (logn) her zaman bir ağaç mıdır?
- 21. VS Tasarımcısı, her zaman "x özelliği bir get/set yöntemine sahip değil" özel durumu atar "
- 22. wxWidgets'ı her zaman wxFileConfig kullanacak şekilde yönlendirmenin en temiz yolu nedir?
- 23. User.Identity.IsAuthenticated her zaman PasswordSignInAsync başarı veriyor sonra her zaman false
- 24. İzin READ_EXTERNAL_STORAGE her zaman reddedildi
- 25. Dikdörtgen POST her zaman boş
- 26. executePendingTransactions() her zaman gerekli midir?
- 27. Her zaman `git getir - -?
- 28. her soket bağlantısına sahip bir div göster
- 29. navigator.onLine her zaman çalışmaz
- 30. Görevi her zaman verilog
Bunu biraz önce anladım! Giriş için teşekkürler! – CaseyB
Arabellek çizimi iyi çalışıyor, ancak bu büyük drawBitmap() yöntemi çok fazla FPS yiyor :( –
Şu anda benim için bir darboğaz var - tam ekran bitmap'ini çizmek için her zaman önceki durumu geri yüklemek için yüksek çözünürlüklü aygıtlar için FPS'yi neredeyse hiç etkilemiyor. Kindle 8.9, 2560x1600'le 3. nesil gibi. Tuvali eski haline getirmeye zorlamanın bir yolu yok mu? OpenGL'ye derinleşme muhtemelen performans sorununu çözebilir, ancak zamanın yolu bu değil. –