繁体   English   中英

Android中的画布绘制路径

[英]Canvas draw path in android

我是android的新手,我想编写一个简单的程序来检测触摸坐标并绘制触摸的圆和路径,我编写一个简单的程序,在触摸周围绘制一个圆并跟随它,但是我仍然可以做到的接触。 当我使用路径启动程序时,它崩溃了,当我删除路径时,它可以正常工作...

public class MainActivity extends Activity {

    float x = 0;
    float y = 0;
    LinearLayout layout; //declarea variabilor pentru desenarea cercului

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); //specificarea 
        layout = (LinearLayout)findViewById(R.id.layout); //gasirea id 
        layout.addView(new CustomView(MainActivity.this));
    }

    public class CustomView extends View { //crearea unei mape pentru canvas
        Bitmap mBitmap;
        Paint paint;
        Path path;

        public CustomView(Context context) {
        super(context);
        mBitmap = Bitmap.createBitmap(640, 1024, Bitmap.Config.ARGB_8888);
            paint = new Paint();
            path = new Path();
            paint.setColor(Color.BLUE);//culoare cercului desenat
            paint.setStyle(Style.FILL);
        }

    protected void onDraw(Canvas canvas) {//desenarea cercului la atingere
        super.onDraw(canvas);
        canvas.drawPath(path,paint);
        canvas.drawCircle(x, y, 25, paint);
    }

    public boolean onTouchEvent(MotionEvent event) {

        int action = event.getAction();

        switch (action){
            case MotionEvent.ACTION_DOWN:
                path.moveTo(event.getX(), event.getY());
                path.lineTo(event.getX(), event.getY());
                break;
            case MotionEvent.ACTION_MOVE:
                x = event.getX();
                y = event.getY();
                path.lineTo(x, y);
                invalidate();
                break;
            case MotionEvent.ACTION_UP:
                path.lineTo(event.getX(), event.getY());
                break;
            case MotionEvent.ACTION_CANCEL:
                break;
            default:
            break;
        }
        return true;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

您没有初始化path 最有可能的是,您的程序由于NullPointerException而崩溃。 尝试将其添加到CustomView构造函数中:

path = new Path();

将来,当您发布有关Android程序崩溃的信息时,如果您从崩溃中发布了logcat输出,那将是最有帮助的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM