Android视图中的onTouchEvent响应缓慢,背景为

时间:2016-11-19 08:16:59

标签: android

一切! 我试图找出为什么我在onTouchEvent方法中的Android视图中响应缓慢。这是一个简单的TicTacToe游戏,我删除了所有的逻辑,只留下与问题有关的事情。 到目前为止,onTouchEvent方法获取坐标,然后调用onDraw方法,该方法只绘制一个圆。 onDraw方法还绘制了背景,即960x1280 jpg文件,大小为366 kB。它工作但我在触摸屏幕和绘制圆圈之间有一个延迟。这是模拟器上的几秒钟,我的三星上约0.5秒。我注意到没有背景它完美地工作。但与此同时,问题似乎并非在于背景。我的意思是,如果我连续多次调用invalidate()绘制更多的数字,它们都会立即绘制,我们只在第一个数字之前延迟。所以据我所知,onTouchEvent方法的反应有所不同,具体取决于是否有背景。 我一直在寻找,但我发现的唯一的事情是添加一个16毫秒的延迟(它在代码中,评论)但它没有帮助。
如果拍摄较小的照片,我会有更好的响应,但我需要这张大图来适应不同的手机。 总而言之,问题在于响应时间取决于背景图片的大小,但与此同时,绘制这个大图片并不是问题,只有onTouchEvent才能使用。我很困惑 - )怎么会这样? 如果可以,请帮助我。

以下是代码:

public class GameViewBug extends View {

    private Paint mCirclePaint;
    private Bitmap bitmap;
    private float touchX;
    private float touchY;

    public GameViewBug(Context context) {
        super(context);
        init();
    }

    public void init() {

        mCirclePaint = new Paint();
        mCirclePaint.setColor(Color.RED);
        mCirclePaint.setStrokeWidth(10);
        mCirclePaint.setStyle(Paint.Style.STROKE);

    }

    @Override
    protected void onDraw(Canvas canvas) {

        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.kletka3);
        canvas.drawBitmap(bitmap, 0, 0, null);
        //canvas.drawColor(Color.WHITE);
        canvas.drawCircle(touchX, touchY, 50, mCirclePaint);

    }

    public boolean onTouchEvent(MotionEvent event) {
//        try {
//            Thread.sleep(16);
//        }catch (InterruptedException e) {}
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            touchX = event.getX();
            touchY = event.getY();
        }
        invalidate();
        return true;

    }
}

1 个答案:

答案 0 :(得分:0)

问题是,你在方法中对主线程执行繁重的计算操作,这经常被调用:

bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.kletka3)

您应该加载一次该资源(建议使用Glide库显示图像),并在后台线程上进行所有计算。