`

Android自定义View之二:Matrix初探(懒了,使用拿来主义了)

阅读更多

原文地址:http://java-admin.iteye.com/blog/792217

Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。

首先介绍一下矩阵运算。加法和减法就不用说了,太简单了,对应位相加就好。图像处理,主要用到的是乘法 。下面是一个乘法的公式:

矩阵相乘示例

Android 里面, Matrix 9 float 值构成,是一个 3*3 的矩阵。如下图。

Android中Matrix矩阵

没专业工具,画的挺难看。解释一下,上面的 sinX cosX ,表示旋转角度的 cos 值和 sin 值,注意,旋转角度是按顺时针方向计算的。 translateX translateY 表示 x y 的平移量。 scale 是缩放的比例, 1 是不变, 2 是表示缩放 1/2 ,这样子。

运行结果如下:

运行结果

以左上角为顶点,缩放一半,逆时针旋转30度,然后沿x轴和y轴分别平移50个像素,代码 里面写的是100,为什么是平移50呢,因为缩放了一半。

大家可以自己设置一下Matrix的值,或者尝试一下两个Matrix相乘,得到的值设置进去,这样才能对Matrix更加熟练。

这里讲的直接赋值的方式也许有点不好理解,不过还好, andrid 提供了对矩阵的更方便的方法

Matrix的操作,总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种,每一种变换在

Android的API里都提供了set, post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点。


set是直接设置Matrix的值,每次set一次,整个Matrix的数组都会变掉。


post是后乘,当前的矩阵乘以参数给出的矩阵。可以连续多次使用post,来完成所需的整个变换。例如,要将一个图片旋
转30度,然后平移到(100,100)的地方,那么可以这样做:

这样就达到了想要的效果。


pre是前乘,参数给出的矩阵乘以当前的矩阵。所以操作是在当前矩阵的最前面发生的。例如上面的例子,如果用pre的话

,就要这样:

旋转、缩放和倾斜都可以围绕一个中心点来进行,如果不指定,默认情况下,是围绕(0,0)点来进行。

运行结果


分享到:
评论

相关推荐

    Android自定义View实例:深度剖析 水晶/水滴 波浪球 实现步骤详解

    在Android开发中,自定义View是一项重要的技能,它允许开发者创造出独特且富有表现力的UI元素,提升用户体验。本文将深度剖析如何实现一个名为“水晶/水滴 波浪球”的自定义View,并通过详细步骤讲解,帮助你掌握...

    Android自定义View实现转盘旋转的效果

    本例中,我们使用自定义 View 实现了一个转盘旋转的效果,使用 Matrix 类来实现转盘的旋转,使用 Bitmap 类来加载图片,并使用 Canvas 类来绘制图片。 知识点: 1. Android 的自定义 View 技术 2. 继承 View 类和...

    android 自定义view比较综合的例子

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的用户界面。这个“android 自定义view比较综合的例子”显然涵盖了多个高级话题,旨在帮助有一定基础的开发者提升自定义...

    BookPage-Android自定义View实现翻页效果,并附带实现教程.zip

    实现了仿真翻页效果,教程完整地描述了翻页原理分析到性能优化的过程教程博客:Android自定义View——从零开始实现书籍翻页效果(一) Android自定义View——从零开始实现书籍翻页效果(二) Android自定义View...

    android 自定义View界面大合集

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据需求创建独特的用户界面元素,以实现更加丰富和个性化的交互体验。"Android 自定义View界面大合集"的主题涵盖了这个领域的广泛知识点,包括但不限于...

    Android 自定义View视图

    在Android应用开发中,自定义View视图是一个重要的技术,它允许开发者根据特定需求创建独一无二的用户界面元素。本文将深入探讨如何通过继承View类来实现一个自定义的罗盘界面,以帮助开发者理解自定义视图的工作...

    Android 自定义View实现水平温度计

    本项目"Android 自定义View实现水平温度计"就是这样一个实例,它通过自定义View来展示一个水平方向的温度计,可以直观地显示当前温度状态。以下是关于这个项目的一些关键知识点和实现细节: 1. **自定义View基础**...

    Android自定义View之高仿QQ健康

    本项目"Android自定义View之高仿QQ健康"旨在教你如何模仿流行的QQ健康应用,利用谷歌的Material Design风格来设计自定义界面,提供一个既美观又实用的样式。 首先,我们来了解一下Material Design。它是谷歌推出的...

    [安卓开发] 自定义View之一: 组合View Demo

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的用户界面组件。本文将深入探讨如何实现一个自定义View,以"组合View Demo"为例,我们将讨论如何将多个基本的Android ...

    android 自定义view及自定义属性

    在Android开发中,自定义View和自定义属性是提升应用个性化和功能扩展性的重要手段。本文将深入探讨这两个核心概念,以及如何在实际项目中应用它们。 ### 自定义View 自定义View允许开发者创建自己的视图组件,以...

    android 自定义View 两种方式

    下面将详细介绍这两种创建自定义View的方式:在Activity中直接使用View以及在XML文件中布局。 1. 在Activity中直接使用View 这种方式通常适用于较为简单的自定义View或者需要在运行时动态创建的视图。首先,你需要...

    Android 自定义view 大合集源码

    在Android开发中,自定义View是一项重要的技能,它允许开发者突破系统提供的标准组件限制,创造出独特且富有创意的用户界面。本资源“Android 自定义view 大合集源码”由知名开发者雨松MOMO提供,旨在深入探讨并实践...

    Android 自定义View (二) 进阶

    本篇文章将深入探讨“Android自定义View的进阶”话题,结合提供的资源,我们将学习如何通过实践来提升自定义View的能力。 首先,自定义View的基本步骤包括创建一个新的View类,继承自Android内置的View或 ViewGroup...

    android自定义View之NotePad出鞘记

    4. **状态保存与恢复**:Android的`onSaveInstanceState()`和`onRestoreInstanceState()`方法用于在配置改变时(如屏幕旋转)保存和恢复View的状态。对于NotePad,这可能包括当前页面、颜色选择等信息。 5. **动画...

    android自定义view自定义buttonDemo

    本Demo主要展示了如何通过自定义View和自定义Button来实现特定的视觉效果和交互功能,比如Button在被点击时变换背景。下面我们将深入探讨这个话题。 首先,自定义View在Android开发中扮演着关键角色,它允许开发者...

    android项目下对图片高斯模糊毛玻璃自定义view

    在Android中,自定义View是通过继承View或者ViewGroup类并重写其onDraw()方法来实现的。在这个项目中,你需要创建一个新的View类,包含绘制图片、应用高斯模糊和设置毛玻璃效果的方法。关键步骤包括: 1. 初始化:...

    Android自定义View图片裁剪,支持自由裁剪、按自定义比例裁剪、圆形裁剪、旋转、镜面翻转,从0到1自定义View

    方便调用,有示例。 Android自定义View图片裁剪,支持自由裁剪、按自定义比例裁剪、圆形裁剪、旋转、镜面翻转,从0到1自定义View。kotlin编写的一个自定义View。

    android自定义View(五)打造自己的遥控器菜单

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的用户界面。本篇文章将深入探讨如何打造一个圆形的遥控器菜单,为用户提供类似电视遥控器的操作体验。这个自定义View将...

    android 自定义view大全,非常好用

    标题中的"android 自定义view大全,非常好用"表明这是一个集合了多种自定义View实现的资源,旨在帮助开发者掌握自定义View的设计和实现。描述中提到的"展示了常见的自定义view套路,实用"意味着这个压缩包可能包含了...

    安卓QQ相关相关-Android自定义View之高仿QQ健康.rar

    本资源“安卓QQ相关相关-Android自定义View之高仿QQ健康.rar”聚焦于如何模仿QQ健康应用中的特定视图组件,为开发者提供了一个实践自定义View的案例。 首先,我们要理解自定义View的基本概念。在Android中,View是...

Global site tag (gtag.js) - Google Analytics