2012-01-06 30 views
6

Belirli bir eylemi gerçekleştirirken androidde dikey bir ilerleme çubuğu yapmak istiyorum. İlerleme, 1. simgeden başlamalı ve son simgede sürekli ilerleme kaydedilmelidir. Bunu yapmanın bir yolunu bulamıyorum. Initial Image Android'de dikey ilerleme çubuğu

  • Final Image
    • herhangi vücut kapı bir ayağı yardımcı olabilir eğer. Oldukça mecbur kalırım.

    +1

    olası yinelenen [Android -? Yerine yatay bir dikey çubuk olmak ProgressBar set] (http://stackoverflow.com/questions/3926395/android-set-a-progressbar-to- –

    +3

    Bu, aslında bunun bir kopyası değil. –

    cevap

    14

    Size bu iki görüntü arasında girişimi çalışıyoruz geçişi anlatmak için biraz zor. Bu nedenle, B/W görüntüsüyle başlamak istersiniz, ancak çapraz solma ile B/W'den Renkli'ye geçiş yapar mı, yoksa renkli görüntü parçalarını yavaşça B/W parçasının altından yukarı doğru uygulamak ister misiniz?

    Eğer bu sizin tercihinizse, gerçek görüntünüz <layer-list> içinde iki beraberlikten oluşacaktır. Bir statik, ve diğeri, renk görüntüsünün bir seviyesini, seviye değerine bağlı olarak ortaya çıkaracak olan bir ClipDrawable temsil eder.

    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
        <item> 
        <bitmap android:src="@drawable/ic_launcher_bw"/> 
        </item> 
        <item> 
        <clip 
         android:clipOrientation="vertical" 
         android:gravity="bottom" 
         android:drawable="@drawable/ic_launcher"/> 
        </item> 
    </layer-list> 
    

    Sonra setLevel() çağrıları ile değer ilerleme göstermek ve değiştirmek için bir ImageView gibi bir fırsatı Drawable olduğunu set

    res/çekilebilir/progress_background.xml: Örneğin, bir XML dosyası oluşturmak

    //This is any view subclass that you have chosen to do this 
    ImageView progress; 
    
    progress.setImageResource(R.drawable.progress_background); 
    
    //Adjust the progress by adjusting the drawable's level 
    progress.setImageLevel(500); 
    // -- OR -- 
    progress.getDrawable().setLevel(500); 
    

    Çekilebilir seviyeler, tam olarak ortaya çıkarılmak üzere tamamen kırpılmış olarak gösterilmek üzere varsayılan olarak 0 ila 10,000 arasında ayarlanır.

    HTH

    ait
    +0

    onu çivilenmişsiniz, ikinci tercihi istiyorum (web sitelerinde War of War yükleme ekranı gibi). Önerilerinizi kesinlikle deneyeceğim çok fazla – windwaker

    +0

    Bir sorunla karşılaşıyorum. Bir test etkinliğinde, tek bir görüntü görüntüsü kullanıyorum ve yukarıda tanımladığınız gibi progress_background.xml kullanıyorum. SetImageResource ayarladıktan ve setilveli statik 6000'e ayarladıktan sonra boş bir ekran alıyorum. Herhangi bir resmin izi yok.Şimdi progress_background.xml statik "flame_bw" kaldırmak ve sadece bir öğe tutmak eğer ben kırpılmış bir görüntü görebiliyorum. 2 Öğeyi kullanırken niye hiçbir şey gösterilmediğine dair bir fikir yok :( – windwaker

    +0

    XML'imde sizi tetiklemiş olabilecek küçük bir hata fark ettim. '' etiketi 'drawable' özelliğinin yerine bir src' özniteliği gerektirir. Ayrıca, 'yerçekimi' özelliğini de kullanmak istediğinizin altından gelmesini istediğiniz gerçeğini not ettim.Varsayılan olarak merkezden ortaya çıkar.Örnekleme düzenlendi – Devunwired

    0

    Bunu yapmanın en iyi yolu, orijinal bitmap'i arka plan olarak kullanmak ve ardından bitmiş görüntünün parçalarını aşağıdan yukarıya çekmek olacaktır. Bu sayede bir grup farklı görüntüye ihtiyacınız olmaz - sadece bitmiş görüntüyü kademeli olarak çizin. Ben böyle bir şey ile yapılabilir düşünüyorum:

    // setup 
    // assuming firstImage is the initial one and secondImage is the final one 
    int totalHeight = firstImage.getHeight(); 
    Canvas canvas = new Canvas(firstImage); 
    ImageView imgView = (ImageView)findViewById(R.id.flame_bar_view); 
    imgView.setImageBitmap(firstBitmap); 
    Rect src = new Rect (0, totalHeight, 
            firstImage.getWidth(), totalHeight); 
    
    // then on each update 
    void updateFlameBar(float percentage) { 
        int height = (int)(totalHeight * percentage); 
        src.top = totalHeight - height; 
        canvas.drawBitmap(secondImage, src, src, null); 
    } 
    
    +0

    Teşekkürler ama ben de bildirimleri ilerleme çubuğu için çalışacak merak ediyorum – windwaker

    +0

    Hayır tüm parçaları elle bağlanmadıkça işe yaramaz. Bu yöntem daha fazla DIY. Devunwired'in çözümü daha iyi. –