Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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
Android 图像未显示在";“onTouch”;方法_Android_Android Canvas_Android View_Surfaceview - Fatal编程技术网

Android 图像未显示在";“onTouch”;方法

Android 图像未显示在";“onTouch”;方法,android,android-canvas,android-view,surfaceview,Android,Android Canvas,Android View,Surfaceview,我想举一个例子,当用户触摸屏幕时,它应该显示一个可绘制的图像 我用过画布,但屏幕总是显示空白。下面是我的代码: public class MainActivity extends Activity implements OnTouchListener { MySurfaceView mySurfaceView; float x, y; @Override protected void onCreate(Bundle savedInstanceState

我想举一个例子,当用户触摸屏幕时,它应该显示一个可绘制的图像

我用过画布,但屏幕总是显示空白。下面是我的代码:

    public class MainActivity extends Activity implements OnTouchListener {

    MySurfaceView mySurfaceView;
    float x, y;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mySurfaceView = new MySurfaceView(MainActivity.this);
        mySurfaceView.setOnTouchListener(this);
        x = 0;
        y = 0;
        setContentView(mySurfaceView);
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
        x = event.getX();
        y = event.getY();
        return false;
    }

    @Override
    protected void onResume() {
        mySurfaceView.resume();
        super.onResume();
    }

    @Override
    protected void onPause() {
        mySurfaceView.pause();
        super.onPause();
    }

    class MySurfaceView extends SurfaceView implements Runnable {

        SurfaceHolder mSurfaceHolder;
        Thread mThread;
        boolean isRunning = true;

        public MySurfaceView(Context context) {
            super(context);
            mSurfaceHolder = getHolder();
        }

        @Override
        public void run() {
            while (isRunning) {
                if (!mSurfaceHolder.getSurface().isValid()) {
                    continue;
                }
                Canvas canvas = mSurfaceHolder.lockCanvas();
                canvas.drawRGB(02, 02, 150);
                if (x != 0 || y != 0) {
                    Bitmap test = BitmapFactory.decodeResource(getResources(),
                            R.drawable.ic_launcher);
                    canvas.drawBitmap(test, x, y, null);
                }
                mSurfaceHolder.unlockCanvasAndPost(canvas);
            }
        }

        public void pause() {
            isRunning = false;
            while (true) {
                try {
                    mThread.join();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;
            }
            mThread = null;
        }

        public void resume() {
            isRunning = true;
            mThread = new Thread();
            mThread.start();
        }

    }

}

将runnable添加到mThread

public void resume() {
        isRunning = true;
        mThread = new Thread(this);
        mThread.start();
    }

但由于您的代码中没有提供runnable。非常感谢@SceLus我犯了一个多么愚蠢的错误:(这是一个诚实的错误。)