2013-10-03 4 views
1

Я создал круг, нарисовал строку вокруг круга и линию (стрелку) в моем методе onDraw().Антенна для выбранного холста

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)? Только один раз или в цикле? Если он находится в цикле, вы можете вращать все, кроме строки с холстом. Если вам не нужна строка на свой собственный элемент/View – Day

+0

Я не называю 'onDraw()' отдельно. Я изменил свой код, чтобы вы могли посмотреть. – Ibungo

ответ

0

Вы можете реализовать новый View, который только рисует линию и не оживляет ее. Затем в вашем макете вы можете нарисовать Line-View ontop OuterCirle-View или сделать это в коде с addView(lineView).

Точно так же вы можете добавить TextView

UPDATE: С setContentView() вы должны установить View, который может содержать другие Views -> Макет как RelativeLayout. И в этом макете вы можете добавить более одного View, позвонив по номеру RelativeLayout.addView(childView). Таким образом, вы можете добавить вращающийся круг, затем линию, а затем TextView, если хотите.

+0

Привет @Day, спасибо за ваш быстрый ответ. Я новичок в программировании. Я создам новый 'View'. Теперь моя путаница заключается в том, как передать новый 'View' методу' setContentView() '. Я думаю, что я могу вызвать 'setContentView()' только один раз внутри 'onCreate()'. – Ibungo

+0

@Ibungo Я обновил свой ответ, надеюсь, теперь это ясно для вас. – Day

+0

Я понял сейчас. Я попытаюсь реализовать и проверить, работает ли он. Спасибо за ваше предложение. – Ibungo

Смежные вопросы