2011-05-27 82 views
11

好吧,所以我一直試圖做這個幾天,我沒有得到任何地方。所以我有以下兩個圖像:Android Gauge動畫問題

第一個是RPM計

RPM Gauge

所述第二圖像是代表轉速計充滿全白圖形:

Full Gauge

我想要做以下事情:

  1. 詢問用戶的RPM輸入,例如,如果他們進入1.2壓力錶將填補如下:

output

我有用戶輸入的工作,我需要與動畫幫助。這是我曾嘗試:

  1. 我一直在使用PorterDuff嘗試,但它也夾在後臺計不只是白條
  2. 我試圖分裂圖像分成小位圖,並將它們存儲到數組所以我可以回憶部分,但這是緩慢的,經常墜毀
  3. 我通過首先應用Gauge到畫布然後保存畫布取得了一些進展:canvas.save();然後剪切白色圖像上的路徑,然後恢復畫布。不過,我不知道如何從左下角開始以180度左右的右下角(CW)進行循環剪輯。這是最好的方法嗎?

我知道這可能是一種更容易或更有效的方式,我只是沒有線索。任何人有任何好點子?

*注意所有的圖片都是PNG的

在此先感謝!

回答

9

正如你已經發現了,我會用夾子:

  • 繪製背景圖片
  • 固定夾,
  • 繪製前景圖像

我會用

Canvas.clipPath() 

路徑看起來像餡餅sl冰開始在圓圈的中心,就像這樣:

Clip path

要創建剪輯路徑類似:

public class PieView extends View { 

    private int width = 200; 
    private int angleStart = 135; 
    private int sweep = 270; 

    private Path p; 

    private Paint paint = new Paint(); 

    public PieView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
     p = new Path(); 
     //move into center of the circle 
     p.setLastPoint(width/2, width/2); 
     //add line from the center to arc at specified angle 
     p.lineTo(width/2+(float)Math.cos(Math.toRadians(angleStart))*(width/2), 
       width/2+(float)Math.sin(Math.toRadians(angleStart))*(width/2)); 
     //add arc from start angle with specified sweep 
     p.addArc(new RectF(0, 0, width, width), angleStart, sweep); 
     //from end of arc return to the center of circle 
     p.lineTo(width/2, width/2); 

     paint.setColor(Color.RED); 
     paint.setStrokeWidth(1); 
     paint.setStyle(Style.STROKE); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawRect(0,0,width,width, paint); 
     canvas.drawPath(p,paint); 
    } 
} 
+0

好吧,我會給你一個鏡頭。我如何讓它看起來動畫?像它被填滿? – 2011-05-27 19:41:34

+1

執行一些循環並相應地更改裁減 – Ludevik 2011-05-27 20:00:52

+0

我對裁剪部分有點困惑。好的,所以有一個矩形是矩形所在尺寸的邊界框: RectF bounds = new RectF(0,0,200,200); 我想做一個clip.addArc(bouns,起始角度,掃描角度);即時假設,我的開始和掃描角度是什麼?我嘗試了180到0,但似乎並沒有產生正確的圖像。 – 2011-05-27 20:22:34