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