• 撕衣服小案例


    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            //[1]找到iv 显示我们操作的图片 
            final ImageView iv = (ImageView) findViewById(R.id.iv);
            
            //[2]把我们要操作的图片转换成bitmap
            Bitmap srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pre19);
            
            //[3]创建原图的副本  
            
            //[3.1]创建模板
            final Bitmap alterbBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), srcBitmap.getConfig());
            //[3.2]以alterbBitmap bitmap为模板创建一个画布 
            Canvas canvas = new Canvas(alterbBitmap);
            //[3.3]创建一个画笔 
            Paint paint = new Paint();
            //[3.4]开始作画 
            canvas.drawBitmap(srcBitmap, new Matrix(), paint);
            
            //[4]把alterbitmap显示到iv上 
            iv.setImageBitmap(alterbBitmap);
            
            //[5]给iv设置一个触摸事件 
            iv.setOnTouchListener(new OnTouchListener() {
                
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    //[6]获取触摸事件的类型 
                    int action = event.getAction();
                    switch (action) {
                        
                    case MotionEvent.ACTION_MOVE: //移动  
                        
                        for (int i = -7; i < 7; i++) {  //改变x 
                            
                            for (int j = -7; j <7; j++) {
                                //为了 良好的用户体验 撕一个圆 
                                if (Math.sqrt(i*i+j*j)<7) {
                                    //一次修改一个像素 
                                    try {
                                        alterbBitmap.setPixel((int)event.getX()+i, (int)event.getY()+j, Color.TRANSPARENT);
                                    } catch (Exception e) {
                                    }
                                }
                                
                                
                            }
                            
                        }
                    
                        
                        //一定要记得更新iv
                        iv.setImageBitmap(alterbBitmap);
                        break;
    
                    }
                    
                    return true;
                }
            });
            
            
            
        }
    
    }
  • 相关阅读:
    查询详细信息和删除记录
    软件开发过程中常用到的一些工具
    无服务器端的UDP群聊功能剖析(WCF版)
    vim插件使用
    C#中ConnectionStrings和AppSettings的区别
    《Effective C++》简明笔记上
    设计模式的一些所想所得
    对RESTful Web API的理解与设计思路
    js加载脚
    OSGi.NET 学习笔记 [模块可扩展支持][概念][实例]
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/6071476.html
Copyright © 2020-2023  润新知