主要是实现了手指在屏幕上滑动实现平移,两个手指进行缩放。主要是这部分矩阵还挺麻烦的。

效果图如下所示:

核心部分代码如下

触控事件处理:

    @SuppressLint("ClickableViewAccessibility")    @Override    public boolean onTouch(View view, MotionEvent motionEvent) {        //ACTION_DOWN不return true,就无触发后面的各个事件        if (motionEvent != null) {            final float normalizedX =toOpenGLCoord(view,motionEvent.getX(),true);            final float normalizedY =toOpenGLCoord(view,motionEvent.getY(),false);            switch (motionEvent.getActionMasked()){                case MotionEvent.ACTION_DOWN:                    X=normalizedX;                    Y=normalizedY;                    break;                case MotionEvent.ACTION_POINTER_DOWN:                    isZooming=true;                    float x1=toOpenGLCoord(view,motionEvent.getX(1),true);                    float y1=toOpenGLCoord(view,motionEvent.getY(1),false);                    dis_start=computeDis(normalizedX,x1,normalizedY,y1);                    break;                case MotionEvent.ACTION_MOVE:                    if(isZooming){                        float x2=toOpenGLCoord(view,motionEvent.getX(1),true);                        float y2=toOpenGLCoord(view,motionEvent.getY(1),false);                        double dis=computeDis(normalizedX,x2,normalizedY,y2);                        double scale=dis/dis_start;                        zoom((float) scale);                        dis_start=dis;                    }else {                        move(normalizedX - X, normalizedY - Y);                        X = normalizedX;                        Y = normalizedY;                    }                    break;                case MotionEvent.ACTION_POINTER_UP:                    isZooming=false;                    X = normalizedX;                    Y = normalizedY;                    break;                case MotionEvent.ACTION_UP:                    break;                default:break;            }            return true;        }        return false;    }  /**     * 屏幕坐标系点转OpenGL坐标系     * @return     */    private static float toOpenGLCoord(View view,float value,boolean isWidth){        if(isWidth){            return (value / (float) view.getWidth()) * 2 - 1;        }else {            return -((value / (float) view.getHeight()) * 2 - 1);        }    }    /**     * 计算两个点之间的距离     * @param x1     * @param x2     * @param y1     * @param y2     * @return     */    private static double computeDis(float x1,float x2,float y1,float y2){        return sqrt(pow((x2-x1),2)+pow((y2-y1),2));    }

render部分矩阵处理:

    private final float[] translateMatrix = new float[16];//平移矩阵    private final float[] zoomMatrix = new float[16];//缩放矩阵    @Override    public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {        glClearColor(1.0f, 1.0f, 1.0f, 1.0f);        //初始化平移矩阵和缩放矩阵为单位矩阵        setIdentityM(translateMatrix,0);//建立单位矩阵        setIdentityM(zoomMatrix,0);//建立单位矩阵    }  @Override    public void onDrawFrame(GL10 gl10) {        glClear(GL_COLOR_BUFFER_BIT);        //平移支持        //两个矩阵相乘        float[] temp = new float[16];        multiplyMM(temp, 0, projectionMatrix, 0, translateMatrix, 0);        float[] temp2 = new float[16];        multiplyMM(temp2, 0, zoomMatrix, 0, temp, 0);        Log.e(TAG,"重新绘制");        for(int i=0;i

 

更多相关文章

  1. Android动画详解之Android动画属性和实现方法(一)
  2. Android(安卓)ImageView ScaleTypes介绍
  3. 分享:android图片浏览器—类微信朋友圈相片浏览【android代码下载
  4. android图形图像函数汇集
  5. android修改图片(修改图片大小,图片旋转,图片平移)
  6. Android(安卓)bitmap 图片缩放,压缩处理
  7. imageView属性之imageView.setScaleType详解
  8. Android(安卓)Canvas笔记
  9. Android(安卓)根据屏幕尺寸适配控件尺寸(按比例缩放)

随机推荐

  1. Android-计算器
  2. Android(安卓)实现欢迎界面
  3. 防止SQLSERVER的事件探查器跟踪软件
  4. sql2005 HashBytes 加密函数
  5. SQl 跨服务器查询语句
  6. MSSQL ISQL命令详解
  7. 返回SQL执行时间的存储过程
  8. 跨服务器查询导入数据的sql语句
  9. sqlserver2005 行列转换实现方法
  10. sql convert函数使用小结