画画板原理

来源:互联网 发布:php全局变量global 编辑:程序博客网 时间:2024/04/27 20:18
//画画板原理:在滑动过程中不断得到坐标,在坐标之间划线    public class MainActivity extends Activity {    private ImageView iv;    private Bitmap srcBM;    private Bitmap copyBM;    private Matrix matrix;    private Canvas canvas;    private Paint paint;    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        iv = (ImageView) findViewById(R.id.iv);        srcBM = BitmapFactory.decodeResource(getResources(), R.drawable.bg);        copyBM = Bitmap.createBitmap(srcBM.getWidth(),srcBM.getHeight(), srcBM.getConfig());        canvas = new Canvas(copyBM);        paint = new Paint();        matrix = new Matrix();        canvas.drawBitmap(srcBM, matrix, paint);        iv.setImageBitmap(copyBM);    iv.setOnTouchListener(new OnTouchListener() {            int startX = 0;            int startY = 0;            public boolean onTouch(View v, MotionEvent event) {                int action =event.getAction();                switch (action) {                case MotionEvent.ACTION_DOWN:                    startX = (int) event.getX();                    startY = (int) event.getY();                    break;                case MotionEvent.ACTION_MOVE:                    int stopX = (int) event.getX();                    int stopY = (int) event.getY();                    canvas.drawLine(startX, startY, stopX, stopY, paint);                    iv.setImageBitmap(copyBM);                    //更新的起始的坐标                    startX = stopX;                    startY = stopY;                    break;                }                return true;//返回值必须为true,为false时不执行            }        });    }    public void red(View view){        paint.setColor(Color.RED);    }    public void brush(View view) {        paint.setStrokeWidth(10);    }    public void save(View view) {        try {            //保存文件            OutputStream os = new FileOutputStream("/mnt/sdcard/draw.jpg");            //压缩图片,第一个参数是压缩格式,第二个是压缩质量,100最高表示不压缩,0最低,第三个参数os表示输出流            copyBM.compress(CompressFormat.JPEG, 100, os);            //记得保存需要权限            Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
0 0
原创粉丝点击