Android画画板剖析

来源:互联网 发布:杀毒防护软件排行 编辑:程序博客网 时间:2024/05/01 10:54
public class MainActivity extends AppCompatActivity {    private ImageView iv;    private Bitmap bitmap, backGroud;    //画纸和背景图    private Canvas canvas;              //画布    private Paint paint;                //画笔    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        iv = (ImageView) findViewById(R.id.iv);        iv.setImageResource(R.drawable.bg);        //拿到背景图        backGroud = BitmapFactory.decodeResource(getResources(), R.drawable.bg);        //拿到和背景图一样大小的画纸        bitmap = Bitmap.createBitmap(300, 750, backGroud.getConfig());        //Canvas相当于一个画板,bitmap为画布,这段代码将bitmap作为画布放在画板上,        //开始画时,画布会随之变化,也就是说bitmap会变成随之画而改变,在这里创建的Canvas和画布的大小一样        canvas = new Canvas(bitmap);        //拿到画笔        paint = new Paint();        paint.setColor(Color.RED);//设置画笔颜色为黑色//            paint.setStyle(Paint.Style.FILL);//设置画笔为空心        paint.setStrokeWidth(5);        //添加处理规则        Matrix matrix = new Matrix();        //照着背景图画        canvas.drawBitmap(backGroud, matrix, paint);        iv.setOnTouchListener(new View.OnTouchListener() {            float startX;            float startY;            @Override            public boolean onTouch(View v, MotionEvent event) {                switch (event.getAction()) {                    //获取按下时的坐标                    case MotionEvent.ACTION_DOWN:                        startX = event.getX();                        startY = event.getY();                        break;                    //获取移动时的坐标                    case MotionEvent.ACTION_MOVE:                        //Canvas的宽高与iv的宽高相同且Canvas的绘图坐标系是以左上角为原点,所以iv点击处距离                        //iv左上角的距离即为我们要画的距离,直接在两点画线,画完之后,将改变后的画布bitmap                        //设置为iv的背景显示                        float stopX = event.getX();                        float stopY = event.getY();                        // 在开始和结束坐标间画一条线                        canvas.drawLine(startX, startY, stopX, stopY, paint);                        //实时更新坐标(通过不断画线)                        startX = event.getX();                        startY = event.getY();                        iv.setImageBitmap(bitmap);                        break;                    case MotionEvent.ACTION_UP:                        break;                    default:                        break;                }                return true;            }        });    }}

0 0
原创粉丝点击