Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 选定画布的Android动画_Java_Android_Animation_Android Canvas_Android Animation - Fatal编程技术网

Java 选定画布的Android动画

Java 选定画布的Android动画,java,android,animation,android-canvas,android-animation,Java,Android,Animation,Android Canvas,Android Animation,我在onDraw方法中创建了一个圆,在圆周围画了一个字符串和一个线箭头 我只想将动画应用于圆及其周围的文本使用Android动画旋转圆及其周围的文本。我在圆内画的线必须是静止的,动画不应应用于该线。但是,上面的代码将动画应用于所有3个画布。我应该做什么改变 此外,我想在圆的中间添加一个TeTVIEW。有人能和我分享一些想法吗?你可以实现一个新的视图,它只画线而不制作动画。 然后在布局中,您可以在OuterCarle视图的顶部绘制线视图,或者使用addViewlineView在代码中进行绘制 与添

我在onDraw方法中创建了一个圆,在圆周围画了一个字符串和一个线箭头

我只想将动画应用于圆及其周围的文本使用Android动画旋转圆及其周围的文本。我在圆内画的线必须是静止的,动画不应应用于该线。但是,上面的代码将动画应用于所有3个画布。我应该做什么改变

此外,我想在圆的中间添加一个TeTVIEW。有人能和我分享一些想法吗?

你可以实现一个新的视图,它只画线而不制作动画。 然后在布局中,您可以在OuterCarle视图的顶部绘制线视图,或者使用addViewlineView在代码中进行绘制

与添加文本视图的方式相同


更新:使用setContentView,您应该设置一个可以包含其他视图的视图->类似RelativeLayout的布局。在此布局中,您可以通过调用RelativeLayout.addViewchildView添加多个视图。通过这种方式,您可以添加旋转圆,然后添加直线,然后添加文本视图(如果需要)。

何时调用onDrawCanvas c?只有一次还是一个循环?如果它在一个循环中,你可以旋转任何东西,除了画布上的线。如果不是,您需要它自己的元素/视图上的行,我不会单独调用onDraw。我已经修改了我的代码,以便你可以看一看。你好@Day,谢谢你的快速回答。我是编程新手。我将创建一个新视图。现在,我的困惑是如何将新视图传递给setContentView方法。我想我只能在onCreate中调用setContentView一次。我现在明白了。我将尝试实施并检查它是否有效。谢谢你的建议。
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);
  }
}