我的自定义视图的 OnDraw 函数被无限调用并且正在循环!可能的原因是什么??
这是我的自定义视图:-
public class Balls extends View{
private static final String TAG = "BallsView";
private int mMode = READY;
public static final int PAUSE = 0;
public static final int READY = 1;
public static final int RUNNING = 2;
public static final int LOSE = 3;
private final Paint mPaint = new Paint();
private double mUx = 0.1;
private double mUy = 2;
private double mVy;
private double mVx;
private double mSx;
private double mSy;
private double mRange;
private float mX1;
private float mY1;
private int mX2;
private int mY2;
private int mDx;
private int mDy;
Time t;
float mAngle;
private final double mGravity = -9.8;
private long mLastTime;
private double mT;
private Canvas mCanvas = null;
public Balls(Context context, AttributeSet attrs, int defStyle){
super(context, attrs, defStyle);
setFocusable(true);
setWillNotDraw(false);
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
mPaint.setStrokeWidth(10);
mPaint.setAntiAlias(true);
mPaint.setStrokeCap(Cap.ROUND);
//mPaint.setColor(0xff00ffff);
mPaint.setARGB(255, 0, 255, 0);
mLastTime = System.currentTimeMillis();
}
public Balls(Context context, AttributeSet attrs) {
super(context, attrs);
setFocusable(true);
setWillNotDraw(false);
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
mPaint.setStrokeWidth(10);
mPaint.setAntiAlias(true);
mPaint.setStrokeCap(Cap.ROUND);
mPaint.setColor(0xff00ffff);
}
@Override
public void onDraw(Canvas canvas) {
Log.w(this.getClass().getName(),"onDraw of Balls called");
super.onDraw(canvas);
mCanvas = canvas;
if(mCanvas!= null)
Log.w(this.getClass().getName(),"Canvas is not null");
}
这个观点在另一项活动中被夸大如下:-
mBalls = (Balls) findViewById(R.id.balls);
该视图放置在相对视图内的 xml 文件中,并且相对视图是水平滚动视图的子视图。
onDraw(Canvas)
像无限循环一样被频繁调用是不正常的。
一般情况下应该调用1到3次,如果没有后续的话invalidate
或布局更改。
无限循环的原因可能是:
1、你打来电话invalidate
or postInvalidate
一些地方。
2、父级或同级布局一直在变化。
3、使用View.LAYER_TYPE_SOFTWARE,es。 setLayerType(View.LAYER_TYPE_SOFTWARE,空)。
值得注意的是 LAYER_TYPE_SOFTWARE 会导致onDraw()
被调用,就像在循环中一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)