• 使用Matrix控制图片和组件的变化


    如下程序开发了一个自定义View,该自定义View可以检测到用户的键盘事件,当用户单击手机的方向键时,该自定义View会用Matrix对绘制的图形进行旋转、倾斜变换。

    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Matrix;
    import android.graphics.drawable.BitmapDrawable;
    import android.util.AttributeSet;
    import android.view.KeyEvent;
    import android.view.View;

    public class MatrixTest extends View{

      //初始化图片资源  

      private Bitmap bitmap;  

      //Matrix实例  

      private Matrix matrix = new Matrix();

      //设置倾斜度  

      private float sx = 0.0f;  

      //位图宽和高  

      private int width;  

      private int height;  

      //缩放比例  

      private float scale = 1.0f;  

      //判断缩放还是旋转  

      private boolean isScale = false;    

      public MatrixTest(Context context, AttributeSet attrs) {   

        super(context, attrs);   

        // 获取位图   

        bitmap = ((BitmapDrawable)context.getResources().getDrawable(R.drawable.ic_launcher,null)).getBitmap();   

        //获得位图宽   

        width = bitmap.getWidth();   

        //获取位图高   

        height = bitmap.getHeight();   

        //使当前试图获得焦点   

        this.setFocusable(true);  

      }  

      @Override  

      protected void onDraw(Canvas canvas) {   

        super.onDraw(canvas);   

        //重置

        Matrix   matrix.reset();   

        if(!isScale){    

          //旋转

          Matrix    matrix.setSkew(sx, 0);   

        }else{    

          //缩放

          Matrix    matrix.setScale(scale, scale);   

        }   

        //根据原始位图和Matrix创建新图片   

        Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);  

        //绘制新位图   

        canvas.drawBitmap(bitmap2, matrix, null);  

      }  

      @Override  

      public boolean onKeyDown(int keyCode, KeyEvent event) {   

        switch (keyCode) {   

          //向左倾斜   

          case KeyEvent.KEYCODE_DPAD_LEFT:    

            isScale = false;    

            sx += 0.1;      

            postInvalidate();   

            break;  

           //向右倾斜  

          case KeyEvent.KEYCODE_DPAD_RIGHT:    

            isScale = false;    

            sx -= 0.1;    

            postInvalidate();    

            break;   

          //放大   

          case KeyEvent.KEYCODE_DPAD_UP:    

            isScale = true;    

            if(scale<2.0){     

              scale += 0.1;    

            }    

            postInvalidate();    

            break;  

          //缩小 

          case KeyEvent.KEYCODE_DPAD_DOWN:    

            isScale = true;    

            if(scale > 0.5){     

              scale -= 0.1;    

            }    

            postInvalidate();    

            break;   

          }   

          return super.onKeyDown(keyCode, event);  

        }

    }

  • 相关阅读:
    strcpy实现 处理地址重叠,返回值问题
    lua的table的删除操作
    防御式编程
    软技能:代码之外的生存指南
    adb命令行输出logcat日志
    SyntaxError: Non-ASCII character 'xe5' in file test.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
    cocos2dx lua 图片去色shader
    cocos studio
    35 个 Java 代码性能优化总结
    Java必备技能:clone浅克隆与深克隆
  • 原文地址:https://www.cnblogs.com/jiww/p/5575262.html
Copyright © 2020-2023  润新知