• 画画板小案例


    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();
            }
            
            
        }
        
    
    }
  • 相关阅读:
    Microsoft.Office.Interop.Excel, Version=12.0.0.0版本高于引用的程序集(已解决)
    关于dubbo的provider和consumer都配置timeout超时时间的情况
    cas单点登录-CAS5.1.3 overlay服务器搭建(二)
    cas单点登录-https的配置(一)
    mysql5.6性能优化
    jvm面试题
    关于Class.getResource和ClassLoader.getResource的路径问题
    构建流式计算卖家日志系统应用实践
    在分布式系统里看CAP定理
    bootstrap插件(对话框)bootbox参数和自定义弹出框宽度设置
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/6070334.html
Copyright © 2020-2023  润新知