2012-12-26 5 views
5

Istnieją dwa obrazy: czarny i niebieski, podczas gdy dotykając niebieskiego obrazu, powinien on wypełniać się jak postęp. Osiągnąłem używając wielu cięć obrazów bez użycia płótna, ale nie dostaję przy dotykaniu smoothness, jak 100 Pushups application.Wypełnij dwie nakładki graficzne, takie jak pasek wyszukiwania na zdarzeniu dotykowym widoku obrazu.

Właściwie staram się osiągnąć podobne jak 100 aplikacji Pushups, jak wspomnę powyżej, mam jeden link, ale to osiągnięto za pomocą płótna i chcę osiągnąć za pomocą obrazów, Google ale bez powodzenia, dowolny link lub samouczek podobny do tego wniosku (100 pompek)?

enter image description here

+0

Jakie jest Twoje aktualne pytanie ..? – Veger

+0

@Veger po dotknięciu obrazu i przewijaniu jak pasek wyszukiwania, a drugi obraz zostanie wyświetlony jako dotykowy. – kyogs

Odpowiedz

4

Oto coś, co wymyśliłem, używając ścieżki klipu. Używam następujących obrazów (kolorów koderów), z których tło jest stałe, a na pierwszym planie zawiera tylko niebieskie kółko na przezroczystym tle. Pierwszy obraz tła jest rysowany na ekranie, a następnie ścieżka klipu jest ustawiana tak, aby obraz postępu, pierwszy plan, był prawidłowo rysowany na wierzchu.

Obraz tła; http://i.imgur.com/Sf6kg.png
Obraz pierwszego planu; http://i.imgur.com/Svtoh.png

I kod;

private class ProgressView extends View { 

    private Bitmap bgBitmap; 
    private Bitmap fgBitmap; 
    private RectF fullRect = new RectF(); 
    private Path clipPath = new Path(); 

    public ProgressView(Context context) { 
     super(context); 
     bgBitmap = BitmapFactory.decodeResource(
            context.getResources(), R.drawable.bg); 
     fgBitmap = BitmapFactory.decodeResource(
            context.getResources(), R.drawable.fg); 
    } 

    @Override 
    public void onDraw(Canvas c) { 
     fullRect.right = getWidth(); 
     fullRect.bottom = getHeight(); 

     c.drawBitmap(bgBitmap, null, fullRect, null); 

     float angle = SystemClock.uptimeMillis() % 3600/10.0f; 

     clipPath.reset(); 
     clipPath.setLastPoint(getWidth()/2, getHeight()/2); 
     clipPath.lineTo(getWidth()/2, getHeight()); 
     clipPath.arcTo(fullRect, -90, angle); 
     clipPath.lineTo(getWidth()/2, getHeight()/2); 
     c.clipPath(clipPath); 

     c.drawBitmap(fgBitmap, null, fullRect, null); 

     invalidate(); 
    } 
} 

Nie powinno być zbyt trudno zastąpić moje tymczasowe obrazy przyzwoitymi i zaktualizować kąt w bardziej odpowiedni sposób.

+2

Zrobiłeś mój dzień, dziękuję. :) – kyogs

+0

Proszę nie używać tego kodu! Obcinanie jest naprawdę powolne i wygląda okropnie na Androida. Lepiej jest narysować go poprawnie na pierwszym miejscu! –

+0

@ Chris.Jenkins Zgoda, najlepiej nie używać przycinania, ale co masz na myśli mówiąc "okropne"? – harism

1

To będzie widok niestandardowy, a zostanie on obsługę metody onTouchEvent() i przerysować, kiedy użytkownik dotyka widok.

Sposób onDraw() będzie sprawdzał coś takiego:

if(mIsBeingTouched){ 
    //set colour to touched 
} 
doDraw(canvas); 
///.... 

Więc kiedy użytkownik dotyka pogląd, chciałbym zwiększyć licznik, a następnie zwiększyć liczbę łuku.

final float arcDistance = mCurrentCount * 3.6; //Based on a max of 100 
canvas.drawArc(mBoundsRectF, 0f, mCurrentCount, mPaint); 

Następnie, który byłby oparty na liczbie.

+0

dzięki ,,,, ale nie używam z color.in mój przypadek ma dwa obrazy. – kyogs

+0

Podaj przykładowy kod i mogę podać przykładową odpowiedź. –

+0

zrobiłem to za pomocą clippath.but jak powiedziałeś nie używaj tego. – kyogs

Powiązane problemy