Java 如何减少android上绘画应用程序的延迟
我一直在为android制作一款绘画应用程序,可以选择不同的颜色。 我的任务几乎完成了。然而,我的应用程序中存在着滞后现象。开始时,它工作正常,但在一些直线之后,它开始给出直线而不是曲线,并且使用滞后 这是我的DrawIt的代码:Java 如何减少android上绘画应用程序的延迟,java,android,Java,Android,我一直在为android制作一款绘画应用程序,可以选择不同的颜色。 我的任务几乎完成了。然而,我的应用程序中存在着滞后现象。开始时,它工作正常,但在一些直线之后,它开始给出直线而不是曲线,并且使用滞后 这是我的DrawIt的代码: package app.paintit; import java.util.ArrayList; import java.util.LinkedList; import android.content.Context; import android.graphics
package app.paintit;
import java.util.ArrayList;
import java.util.LinkedList;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.view.MotionEvent;
import android.view.View;
public class DrawIt extends View{
float x,y;
Paint paint;
int count1=0,count2=0;
ArrayList<Lines> lines = new ArrayList<Lines>();
public int color= 0xFFFFFF;
Lines l;
Path path;
public DrawIt(Context context) {
super(context);
// TODO Auto-generated constructor stub
x=0;y=0;
paint=new Paint();
path = new Path();
paint.setAntiAlias(true);
paint.setStrokeWidth(2);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent event) {
// TODO Auto-generated method stub
if(event.getAction() == MotionEvent.ACTION_DOWN){
l = new Lines();
l.color = color;
l.xCoordinate = new ArrayList<Float>();
l.xCoordinate.add(event.getX());
l.yCoordinate = new ArrayList<Float>();
l.yCoordinate.add(event.getY());
lines.add(l);
}
else if(event.getAction() == MotionEvent.ACTION_MOVE)
{
l.color = color;
l.xCoordinate.add(event.getX());
l.yCoordinate.add(event.getY());
lines.add(l);
}
invalidate();
return true;
}
});
}
@Override
protected void onDraw(final Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
canvas.drawColor(Color.BLACK);
Lines p,q;
float nowX,nowY,prevX=0,prevY=0;
for(int j=0;j<lines.size();j++){
p = lines.get(j);
Path path1=new Path();
paint.setColor(p.color);
path1.moveTo(p.xCoordinate.get(0), p.yCoordinate.get(0));
for(int i=1;i<p.xCoordinate.size()-1;i++){
float midX=(p.xCoordinate.get(i)+p.xCoordinate.get(i-1))/2;
float midY=(p.yCoordinate.get(i)+p.yCoordinate.get(i-1))/2;
path1.quadTo(p.xCoordinate.get(i-1), p.yCoordinate.get(i-1), midX, midY);
canvas.drawPath(path1, paint);
}
}
}
}
package app.paintit;
导入java.util.ArrayList;
导入java.util.LinkedList;
导入android.content.Context;
导入android.graphics.Canvas;
导入android.graphics.Color;
导入android.graphics.Paint;
导入android.graphics.Path;
导入android.view.MotionEvent;
导入android.view.view;
公共类DrawIt扩展视图{
浮动x,y;
油漆;
int count1=0,count2=0;
ArrayList行=新的ArrayList();
公共整数颜色=0xFFFFFF;
线l;
路径;
公共绘图(上下文){
超级(上下文);
//TODO自动生成的构造函数存根
x=0;y=0;
油漆=新油漆();
路径=新路径();
paint.setAntiAlias(真);
油漆。设置行程宽度(2);
绘制.设置样式(绘制.样式.笔划);
绘制.设置行程连接(绘制.连接.圆形);
setOnTouchListener(新的OnTouchListener(){
@凌驾
公共布尔onTouch(视图arg0,运动事件){
//TODO自动生成的方法存根
if(event.getAction()==MotionEvent.ACTION\u向下){
l=新行();
l、 颜色=颜色;
l、 xCoordinate=newarraylist();
l、 xCoordinate.add(event.getX());
l、 yCoordinate=newarraylist();
l、 yCoordinate.add(event.getY());
行。添加(l);
}
else if(event.getAction()==MotionEvent.ACTION\u MOVE)
{
l、 颜色=颜色;
l、 xCoordinate.add(event.getX());
l、 yCoordinate.add(event.getY());
行。添加(l);
}
使无效();
返回true;
}
});
}
@凌驾
受保护的void onDraw(最终画布){
//TODO自动生成的方法存根
super.onDraw(帆布);
画布。drawColor(颜色。黑色);
p,q线;
浮动nowX,nowY,prevX=0,prevY=0;
对于(int j=0;jCalling invalidate会用每一行重新绘制整个画布。最终,这将对onDraw方法(可能会出现延迟)造成很大影响。我通常将invalidate()
放在draw方法中,然后调用postInvalidateDelayed(15)
以保持帧速率接近恒定。
package app.paintit;
import java.util.ArrayList;
import java.util.LinkedList;
import android.graphics.Color;
public class Lines {
ArrayList<Float> xCoordinate;
ArrayList<Float> yCoordinate;
int color;
}