在 Android 动画中,缩放动画(scale标签)和旋转动画(rotate标签)均有 android:pivotX 和 android:pivotY 这两个属性,其值可以有多种形式,并不是很好理解。本文就用一个小 Demo 来展示这两个属性的含义,相信看了之后会有很直观的感受。

android:pivotX 表示缩放/旋转起点 X 轴坐标,可以是整数值、百分数(或者小数)、百分数p 三种样式,比如 50、50% / 0.5、50%p。当属性值为数值时,表示在当前 View 的左上角,即原点处加上 50px,作为起始点;如果是百分数,比如 50%,表示在当前控件的左上角加上自己宽度的 50% (即自身宽度中心)作为起始点;如果是 50%p(字母 p 是 parent 的意思),取值的基数是父控件,那么 50%p 就是表示在当前的左上角加上父控件宽度的 50% 作为起始点 x 轴坐标

总之就是:相对于对象的顶部边缘的像素(50);或相对于物体的顶部边缘的百分比 (例如 “50%”);或相对于父容器的顶部边缘的百分比 (例如 “50%p”).

android:pivotY 为缩放/旋转起点 Y 轴坐标,取值及其意义与android:pivotX类似。

下面以缩放动画为例,在工程的 res 文件夹下新建 anim 文件夹,然后在该文件夹中新建scale_anim.xml如下:

<?xml version="1.0" encoding="utf-8"?>

MainActivity.java 如下:

public class MainActivity extends Activity {    private TextView mTvAnimation;    private Button mBtnStartAnimation;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_main);        mTvAnimation = findViewById(R.id.tv_animation);        mBtnStartAnimation = findViewById(R.id.btn_start_animation);        mBtnStartAnimation.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //通过loadAnimation从XML文件中获取动画                Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.scale_anim);                 //利用startAnimation将动画传递给指定控件                mTvAnimation.startAnimation(animation);             }        });    }}

MainActivity 的布局文件 activity_main.xml如下:

<?xml version="1.0" encoding="utf-8"?>    

运行 Demo 后效果如下: 


 

将 scale_anim.xml 中的属性改为 百分数/小数 的形式,如下:

       android:pivotX="50%"       android:pivotY="50%"

运行后效果如下: 


 

再将 scale_anim.xml 中的属性改为 百分数p 的形式,如下:

       android:pivotX="50%p"       android:pivotY="50%p"

其运行后效果如下: 


 

上面三种取值的大致起始点如下图所示: 


 

特别的,当android:pivotX和android:pivotY 为百分数/小数时,若均为 0.0 时,起始点为 View 左上角;均为 0.5 时起始点是 View 中心点;均为 1.0 时起始点是 View 右下角。

更多相关文章

  1. Android学习手记:第一个应用程序!
  2. Android(安卓)Dialog使用举例
  3. android多dex打包问题
  4. Error Installing APK
  5. Android中回调接口的使用
  6. Android状态栏提醒(Notification,NotificationManager)的使用
  7. android 代码混淆问题解决
  8. 【Android】App界面与顶部状态栏重叠遮盖问题
  9. Android(安卓)Bundle类

随机推荐

  1. Textview基本属性及功能
  2. 解决 Android(安卓)模拟器 无法上网问题
  3. Android带播放进度条的音乐播放器
  4. android 上调试动态库方法
  5. Android一些好的资源
  6. Android音频架构解析
  7. Android开发环境搭建教程
  8. android之Progress
  9. Android启动过程深入解析
  10. Android数据存储