我想创建一个自定义视图来动画一些线条。所以我创建了一个扩展View
类的类。我致电onDraw()
&画在画布上。
以下是我到目前为止所采用的一些代码。
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
p += 10;
canvas.drawLine(5, 5, p, 5, mPaint);
invalidate();
}
请注意p& mPaint在构造函数中实例化。
但是,即使我调用了invalidate()
方法,它也不会更新画布,也就是说没有为该线设置动画。
那么,如何解决这个问题呢?
答案 0 :(得分:1)
你确定它没画画吗?你的Paint对象是什么颜色的?
我创建了一个空白的4.4 android应用程序,添加了这个类:
package ca.kieve.playground;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
public class AnimView extends View {
private int p = 0;
private Paint mPaint;
public AnimView(Context context) {
super(context);
init();
}
public AnimView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
mPaint = new Paint();
mPaint.setColor(Color.RED);
mPaint.setStrokeWidth(10);
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
p += 1;
canvas.drawLine(5, 5, p, 5, mPaint);
invalidate();
}
}
并将activity_main.xml更改为:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="ca.kieve.playground.MainActivity" >
<ca.kieve.playground.AnimView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
这没有任何问题。
答案 1 :(得分:-1)
删除
invalidate() form onDraw().
使用
inavalidate() while you have done with your changes.