• 画画板小案例


    import android.graphics.Color;
    import android.graphics.Matrix;
    import android.graphics.Paint;
    import android.view.Menu;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener;
    import android.widget.ImageView;
    
    public class MainActivity extends Activity {
    
        private Bitmap srcBitmap;
        private ImageView iv;
        private Bitmap copyBitmap;
        private Canvas canvas;
        private Paint paint;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //[1]找到imageview  显示我们画的内容 
            iv = (ImageView) findViewById(R.id.iv);
            
            //[2]把bg转换成bitmap 
            srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
            //[2.1]创建模板 
            copyBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), srcBitmap.getConfig());
            //[2.2]以copybitmap为模板  创建一个画布 
            canvas = new Canvas(copyBitmap);
            //[2.3]创建一个画笔 
            paint = new Paint();
            //[2.4]开始作画 
            canvas.drawBitmap(srcBitmap, new Matrix(), paint);
            
    //        canvas.drawLine(20, 20, 30, 50, paint);
            
            //[3]把copybitmap显示到iv上 
            iv.setImageBitmap(copyBitmap);
            
            //[4]给iv设置一个触摸事件 
            iv.setOnTouchListener(new OnTouchListener() {
                
                int startX = 0;
                int startY = 0;
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    //[5]获取手指触摸的事件类型 
                    int action = event.getAction();
                    //[6]具体判断一下是什么事件类型 
                    switch (action) {
                    case MotionEvent.ACTION_DOWN: //按下 
                        //[7]获取手指按下坐标 
                        startX = (int) event.getX();
                        startY= (int) event.getY();
                        System.out.println("按下:"+startX+"---"+startY);
                        break;
                        
                    case MotionEvent.ACTION_MOVE://移动 
                        //[8]获取停止的坐标  
                        int stopX = (int) event.getX();
                        int stopY = (int) event.getY();
                        
                        System.out.println("移动:"+stopX+"---"+stopY);
                        
                        //[9]画线 
                        canvas.drawLine(startX, startY, stopX, stopY, paint);
                        
                        //[9.1]更新一下起点坐标 
                        startX = stopX;
                        startY = stopY;
                        
                        //[10]记得更新ui 
                        iv.setImageBitmap(copyBitmap);
                        
                        
                        break;
                        
                    case MotionEvent.ACTION_UP: //抬起;
    
                        break;
                    }
                    return true;
                }
            });
            
            
            
        }
    
        //点击按钮让画笔的颜色 变成红色 
        public void click1(View v) {
            //设置画笔颜色
            paint.setColor(Color.RED);
        }
        
        
        //让画笔颜色变粗
        public void click2(View v) {
            //设置画笔的宽度
            paint.setStrokeWidth(15);
            
        }
        
        //保存大作 
        public void click3(View v) {
            /**
             * format 保存图片的格式 
             * 
             * quality 保存照片的质量
             */
            try {
                File file = new File(Environment.getExternalStorageDirectory().getPath(),"dazuo.png");
                FileOutputStream fos = new FileOutputStream(file);
                copyBitmap.compress(CompressFormat.PNG, 100, fos);
                
                //发送一条sd卡挂载上来的广播 欺骗一下系统图库应用 说sd卡被挂载了 你去加载图片吧
                
                Intent intent = new Intent();
                //设置action
                intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
                //设置data 
                intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
                
                //发送无序广播
                sendBroadcast(intent);
                
                fos.close(); //关闭流
                
                
            } catch (Exception e) {
                e.printStackTrace();
            }
            
            
        }
        
    
    }
  • 相关阅读:
    大小写敏感性
    Select的深入应用(1)
    SQL模式匹配
    返回日期和时间范围
    利用枚举管理事务逻辑
    自动记录数据的改变时间
    操作日期和时间
    关于Rational Functional Tester (RFT)的简单介绍
    html布局 左右固定,中间只适应,三种方法实现
    js混合计算字符串字节长度
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/6070334.html
Copyright © 2020-2023  润新知