前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >animation rotate_canvas scale

animation rotate_canvas scale

作者头像
全栈程序员站长
发布2022-11-04 17:33:46
发布2022-11-04 17:33:46
62800
代码可运行
举报
运行总次数:0
代码可运行

点击按钮有相应的效果!

解析在代码注释里!!!

main.xml

代码语言:javascript
代码运行次数:0
复制
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >

    <TextView
        android:id="@+id/text"
        android:background="#FFFF00"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
    
        />

    <Button
        android:id="@+id/translate"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:text="测试translate效果" />

    <Button
        android:id="@+id/alpha"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/translate"
        android:text="测试alpha效果" />

    <Button
        android:id="@+id/rotate"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/alpha"
        android:text="测试rotate效果"
         />
    
     <Button
        android:id="@+id/scale"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/rotate"
        android:text="测试scale效果"
         />

      

</RelativeLayout>

main.java

代码语言:javascript
代码运行次数:0
复制
package com.fzq.animation;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private Button translate, alpha, rotate, scale;
private TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
translate = (Button) findViewById(R.id.translate);
alpha = (Button) findViewById(R.id.alpha);
rotate = (Button) findViewById(R.id.rotate);
scale = (Button) findViewById(R.id.scale);
text = (TextView) findViewById(R.id.text);
translate.setOnClickListener(new transLateListener());
alpha.setOnClickListener(new alphaListener());
rotate.setOnClickListener(new rotateListener());
scale.setOnClickListener(new scaleListener());
}
class transLateListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
AnimationSet animationSet = new AnimationSet(true);
/*
* tanslateAnimation的2种参数方法
*/
/*
* 第一种 ----> TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta)
* 从坐标(fromXDelta,fromYDelta)移动到(toXDelta,toYDelta),这些坐标都表示增量坐标
* 
* 解释如下:
* 设当前A坐标为(50,50) TranslateAnimation(10,15,20,25),
* 那么A点是从起始点(50+10,50+20)【注意!并不是从(50,50)】移动到当前点(50+15,50+25)
* 
* 效果:
* A(50, 50)跳跃到相对于该位置(10,20)的点B【B的坐标为(50+10,50+20)】,在移动到相对于A点(15,25 )的点C【C的坐标为(50+15,50+25)】
* 
* TranslateAnimation translateAnimation=new
* TranslateAnimation(10,15,20,25);
*/
/*
* 第二种 ---> TranslateAnimation(fromXType, fromXValue, toXType,toXValue, fromYType, fromYValue, toYType, toYValue)移动的坐标还是增量坐标
* Type有三种,Value的值一起说明: Animation.ABSOLUTE,
* 为绝对位置。value值为50,既为相对于当前位置增量为50的坐标点
* Animation.RELATIVE_TO_SELF(相对自己),Animation.RELATIVE_TO_PARENT(相对父控件)。value的值都为百分比(0-1.0) 
* 
* 解释如下:
* new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0.5f,
*  Animation.ABSOLUTE, 10, Animation.RELATIVE_TO_SELF, 0.5f,
* Animation.ABSOLUTE, 10); 
* 设View的宽为100,高为50     就是从(100*0.5,50*0.5)的增量点移动到(10,10)增量点
* 
* 效果:
*假设当前坐标为(50,50),那么A(50,50)跳跃到相对于该位置
* (100*0.5,50*0.5)的点B【B的坐标为(50+100*0.5,50+50*0.5)】,
* 在移动到相对于A点(10,10)的点C【C的坐标为(50+10,50+10)】
*/
TranslateAnimation translateAnimation = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 1f, Animation.ABSOLUTE, 400,
Animation.RELATIVE_TO_SELF, 1f, Animation.ABSOLUTE, 400);
translateAnimation.setDuration(2000);
animationSet.addAnimation(translateAnimation);
text.setAnimation(animationSet);
}
}
class alphaListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// 创建一个Animatioset对象
AnimationSet animationSet = new AnimationSet(true);
// 创建AlphaAnimation对象
/*
* 
AlphaAnimation(float fromAlpha, float toAlpha)
第一个参数fromAlpha为 动画开始时候透明度
第二个参数toAlpha为 动画结束时候透明度
*/
AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
// 设置动画执行所需要的时间
alphaAnimation.setDuration(1000);
// 将alphaAnimation对象添加到AnimationSet当中
animationSet.addAnimation(alphaAnimation);
// 使用控件执行动画效果
text.setAnimation(animationSet);
}
}
class rotateListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
AnimationSet animationSet = new AnimationSet(true);
/*
* 
* fromDegrees    起始时物件的角度  
* toDegrees        结束时物件的角度 可以大于360度
* 【度数为负数—表示逆时针旋转】
* 
* pivotX,        动画相对于物件的X坐标的开始位置
* pivotY       动画相对于物件的X坐标的开始位置
* pivotX pivotY都从0-100%中取值】
* 
pivotXType:X轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
pivotXValue:X坐标的伸缩值。
pivotYType:Y轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
pivotYValue:Y坐标的伸缩值
* 
*  new RotateAnimation(0, 360,Animation.RELATIVE_TO_PARENT, 0f,Animation.RELATIVE_TO_PARENT, 0.5f);
*  解释如下:
*  条件:设图片大小为(100,80),图片左上角的坐标为(0,0);
*  效果:以(图片的父控件的宽度*0,图片的父控件的高度*0.5)为原点,图片旋转360度。
* 
*/
RotateAnimation rotateAnimation = new RotateAnimation(0, 360,
Animation.RELATIVE_TO_PARENT, 0f,
Animation.RELATIVE_TO_PARENT, 0.5f);
rotateAnimation.setDuration(1000);
animationSet.addAnimation(rotateAnimation);
text.setAnimation(animationSet);
}
}
class scaleListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
AnimationSet animationSet = new AnimationSet(true);
/*  ScaleAnimation的三种参数方法*/
/*
* fromX:起始X坐标上的伸缩尺寸
* toX:结束X坐标上的伸缩尺寸
* fromY:起始Y坐标上的伸缩尺寸
* toY:结束Y坐标上的伸缩尺寸
* 
* pivotX表示缩放的中轴点X坐标,距离自身左边缘的位置
* pivotY表示缩放的中轴点Y坐标,距离自身上边缘的位置
* 
* 
* pivotXType:X轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
pivotXValue:X坐标的伸缩值。
pivotYType:Y轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
pivotYValue:Y坐标的伸缩值
第一种 ---> new ScaleAnimation(fromX, toX, fromY, toY);
解释如下:
ScaleAnimation(0.8f, 0.2f, 0.8f, 0.2f),
条件:设图片起始尺寸为(100,80),左上角的坐标为(0,0)
效果:以左上角的坐标为准, 从 宽100*0.8,高80*0.8  伸缩到 100*0.2, 高80*0.2
第二种 --->new ScaleAnimation(fromX, toX, fromY, toY, pivotX, pivotY)
第三种 --->new ScaleAnimation(fromX, toX, fromY, toY, pivotXType, pivotXValue, pivotYType, pivotYValue)
解释如下:
ScaleAnimation(0.8f, 0.5f, 0.8f,0.5f, Animation.RELATIVE_TO_SELF ,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
条件:设图片的尺寸为(100,80),左上角的坐标为(0,0),那么中心点的坐标为(50,40)
效果:以中心点(50,40)为准, 图片从宽100*0.8f,高80*0.8 伸缩到 100*0.5, 高80*0.5
*/
ScaleAnimation scaleAnimation = new ScaleAnimation(0.8f, 0.5f, 0.8f,0.5f, Animation.RELATIVE_TO_SELF ,0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
scaleAnimation.setDuration(1000);
animationSet.addAnimation(scaleAnimation);
text.setAnimation(animationSet);
}
}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/181804.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档