【发布时间】:2017-03-18 23:12:56
【问题描述】:
我的应用程序运行良好,但是当屏幕方向改变时,surfaceview 被清除。我正在使用路径来绘制徒手。我正在尝试使用路径数组列表将其恢复到原始状态。
下面是我初始化arraylist的类的构造函数
public DrawThread(Context context){
this.context = context;
paths = new ArrayList<Path>(); //this is the arraylist in which i store path.
//path = new Path();
paint = new Paint();
paint.setColor(Color.RED);
paint.setStrokeWidth(5);
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
}
下面是负责绘制路径的函数
boolean doTouchEvent(MotionEvent event) {
int eventaction = event.getAction();
int X = (int)event.getX();
int Y = (int)event.getY();
switch (eventaction ) {
case MotionEvent.ACTION_DOWN:
path = new Path();
path.moveTo(X, Y);
path.lineTo(X, Y);
break;
case MotionEvent.ACTION_MOVE:
//path.close();
//path.moveTo(lastX, lastY);
path.lineTo(X, Y);
break;
case MotionEvent.ACTION_UP:
path.lineTo(X, Y);
//path.setLastPoint(X, Y);
paths.add(path);
break;
}
drawOnCanvas();
return true;
}
private void drawOnCanvas(){
Canvas canvas = null;
try{
canvas = sHolder.lockCanvas(null);
if(canvas != null & path!= null){
canvas.drawPath(path, paint);
}
}finally {
if(canvas!=null){
sHolder.unlockCanvasAndPost(canvas);
}
}
}
下面是负责将surfaceview恢复到原始状态的函数。
当屏幕方向改变时调用setSurfaceSize。
public void setSurfaceSize(int width , int height){
sWidth = width;
sHeight = height;
redrawall();
}
private void redrawall(){
Canvas canvas = null;
int i = 0;
try{
canvas = sHolder.lockCanvas(null);
if(canvas != null & paths!= null){
if(paths.isEmpty()){
Toast.makeText(context, "empty", Toast.LENGTH_SHORT).show();
}
for (Path pp : paths){
canvas.drawPath(pp, paint);
}
}
}finally {
if(canvas!=null){
sHolder.unlockCanvasAndPost(canvas);
}
}
}
问题是路径(数组列表)始终为空,旋转后屏幕保持空白。
【问题讨论】:
-
方向更改将暂停并恢复活动。您是否将状态存储在静态变量中?
-
感谢您回复fadden。我正在使用路径在屏幕上绘制。我将路径存储在数组列表中。我用它来将屏幕恢复到原始状态,但那个数组列表总是空的。我无法理解为什么 arraylist 为空。
标签: android screen orientation surfaceview