2013-10-03 69 views
1

我創建了一個圓圈,在我onDraw()方法繪製繞了一圈,併線(箭頭)的字符串。Android的動畫選擇畫布

public class Circle extends Activity { 

    public class OuterCircle extends View { 
    Paint paint = new Paint(); 
    private Animation anim; 
    Path path = new Path(); 
    private static final String s = "Hello world example"; 

    public OuterCircle(Context context) { 
     super(context); 
     init(); 
    } 

    private void init() { 
     paint.setColor(Color.WHITE); 
     paint.setStyle(Style.STROKE); 
     paint.setStrokeWidth(2); 
     paint.setAntiAlias(true); 
    } 

    private void drawStringOnCircle(Canvas c) { 
     path.addCircle(getWidth()/2, getHeight()/2, 180, Direction.CW); 
     c.drawTextOnPath(s, path, 0, 10, paint); 
     setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
    } 

    private void createAnimation() { 
     anim = new RotateAnimation(0, 360, getWidth()/2, getHeight()/2); 
     anim.setRepeatMode(Animation.RESTART); 
     anim.setRepeatCount(Animation.INFINITE); 
     anim.setDuration(100L); 
     startAnimation(anim); 
    } 

    public void onDraw(Canvas c) {  
     int cx = getWidth()/2; 
     int cy = getHeight()/2; 

     if (anim == null) { 
      createAnimation(); 
     } 

     c.drawCircle(cx, cy, 170, paint);  
     drawStringOnCircle(c); 
     c.drawLine(cx, cy, cx, cy+170, paint); // do not include this line in animation 
    } 
    } 

    OuterCircle = compassView; 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    compassView = new DrawCompass(this); 
    setContentView(compassView); 
    } 
} 

我想僅將動畫應用於圓圈及其周圍的文本(使用Android動畫旋轉圓圈及其周圍的文本)。我在圓內繪製的線條必須是靜止的(動畫不應該應用於線條)。但是,上面的代碼是將動畫應用到所有的3 Canvas。我應該做什麼改變?

另外,我想在圓圈中間加一個TextView。任何人都可以分享我的想法嗎?

+0

何時調用onDraw(Canvas c)?只有一次或循環?如果它處於循環中,則可以旋轉一切,但只能使用畫布進行旋轉。 如果不是,你需要它自己的元素上的線/查看 – Day

+0

我不是單獨調用'onDraw()'。我修改了我的代碼,以便您可以查看。 – Ibungo

回答

0

您可以實現一個新的View只畫了線,不動畫效果。 然後在您的佈局中,您可以繪製OuterCirle-View上的Line-View ontop,或者以代碼addView(lineView)進行繪製。

用同樣的方法,你可以添加一個TextView

UPDATE:隨着setContentView()你應該設定一個View它可以包含其他視圖 - >像RelativeLayout的佈局。在此佈局中,您可以通過調用RelativeLayout.addView(childView)添加多個View。通過這種方式,您可以添加旋轉的Circle,然後添加行,然後添加TextView(如果需要)。

+0

嗨@Day,感謝您的快速回答。我是編程新手。我將創建一個新的「視圖」。現在,我的困惑是如何將新的'View'傳遞給'setContentView()'方法。我想我只能在'onCreate()'內調用'setContentView()'一次。 – Ibungo

+0

@Ibungo我更新了我的答案,我希望現在對你很清楚。 – Day

+0

我現在明白了。我會盡力實施並檢查它是否有效。感謝您的建議。 – Ibungo