Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何减少android上绘画应用程序的延迟_Java_Android - Fatal编程技术网

Java 如何减少android上绘画应用程序的延迟

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

我一直在为android制作一款绘画应用程序,可以选择不同的颜色。 我的任务几乎完成了。然而,我的应用程序中存在着滞后现象。开始时,它工作正常,但在一些直线之后,它开始给出直线而不是曲线,并且使用滞后

这是我的DrawIt的代码:

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;
}