
android 不用XML,怎样在代码里用animation同时实现图片的缩放和移动。
2个回答
展开全部
1.在Java Code定义动画
AlphaAnimation
渐变透明度动画效果
ScaleAnimation
渐变尺寸伸缩动画效果
TranslateAnimation
画面转换位置移动动画效果
RotateAnimation
画面转移旋转动画效果
//定义变量
private Animation myAnimation_Alpha;
private Animation myAnimation_Scale;
private Animation myAnimation_Translate;
private Animation myAnimation_Rotate;
myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);
//第一个参数fromAlpha为 动画开始时候透明度
//第二个参数toAlpha为 动画结束时候透明度
myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
//第一个参数fromX为动画起始时 X坐标上的伸缩尺寸
//第二个参数toX为动画结束时 X坐标上的伸缩尺寸
//第三个参数fromY为动画起始时Y坐标上的伸缩尺寸
//第四个参数toY为动画结束时Y坐标上的伸缩尺寸
//第五个参数pivotXType为动画在X轴相对于物件位置类型
//第六个参数pivotXValue为动画相对于物件的X坐标的开始位置
//第七个参数pivotXType为动画在Y轴相对于物件位置类型
//第八个参数pivotYValue为动画相对于物件的Y坐标的开始位置
myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);
//第一个参数fromXDelta为动画起始时 X坐标上的移动位置
//第二个参数toXDelta为动画结束时 X坐标上的移动位置
//第三个参数fromYDelta为动画起始时Y坐标上的移动位置
//第四个参数toYDelta为动画结束时Y坐标上的移动位置
myAnimation_Rotate=new RotateAnimation(0.0f,350.0f,Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIV E_TO_SELF, 0.5f);
//第一个参数fromDegrees为动画起始时的旋转角度
//第二个参数toDegrees为动画旋转到的角度
//第三个参数pivotXType为动画在X轴相对于物件位置类型
//第四个参数pivotXValue为动画相对于物件的X坐标的开始位
//第五个参数pivotXType为动画在Y轴相对于物件位置类型
//第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置
2.3自定义动画
除了以上4类动画外,在代码中继承android.view.animation.Animation类来实现自定义效果。通过重写Animation的applyTransformation(float interpolatedTime, Transformation t)函数来实现自定义动画效果。
在绘制动画的过程中会反复的调用applyTransformation函数,每次调用参数interpolatedTime值都会变化,该参数从0渐 变为1,当该参数为1时表明动画结束。通过参数Transformation 来获取变换的矩阵(matrix),通过改变矩阵就可以实现各种复杂的效果。
自定义图片旋转效果动画代码。
class ViewAnimation extends Animation
{
int mCenterX;
int mCenterY;
Camera camera = new Camera();
public ViewAnimation()
{
}
@Override
public void initialize(int width, int height, int parentWidth,
int parentHeight)
{
super.initialize(width, height, parentWidth, parentHeight);
mCenterX = width/2;
mCenterY = height/2;
setDuration(2500);
setFillAfter(true);
// setRepeatCount(100);
setInterpolator(new LinearInterpolator());
}
@Override
protected void applyTransformation(float interpolatedTime,
Transformation t)
{
final Matrix matrix = t.getMatrix();
camera.save();
camera.translate(0.0f, 0.0f, (1300 - 1300.0f * interpolatedTime));
camera.rotateY(360 * interpolatedTime);
camera.getMatrix(matrix);
matrix.preTranslate(-mCenterX, -mCenterY);
matrix.postTranslate(mCenterX, mCenterY);
camera.restore();
}
}
camera.translate(0.0f, 0.0f, (1300 - 1300.0f * interpolatedTime))在第一次调用的时候interpolatedTime值为0,相当于把ImageView在Z轴后移1300像素, 然后逐步的往前移动到0,同时camera.rotateY(360 * interpolatedTime)函数又把ImageView沿Y轴翻转360度
2.4动画实现
在代码的一个activity中,将需要动画的控件与已定义的动画关联,开启动画
private Animation mAnimationXXX = null;//生明动画
ImageView mAnimImageX = null;//生明 ImageView控件(或者其它需要有动画的控件)
mAnimImageX = (ImageView) this.findViewById(R.id.anim_imageX);//取得图片资源
mAnimImageX.startAnimation(mAnimationXXX);//基于xml文件,开启动画
mAnimImageX.startAnimation(new ViewAnimation());//基于自定义控件,开启动画。
2.5图片旋转Demo
public class AnimationDemo extends Activity {
/** Called when the activity is first created. */
ImageView mAnimImage;
private Animation mAnimationAlpha = null;
private Animation mAnimationScale = null;
private Animation mAnimationTranslate = null;
private Animation mAnimationRotate = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mAnimImage = (ImageView) this.findViewById(R.id.anim_image1);
mAnimationAlpha = AnimationUtils.loadAnimation(this,R.anim.alpha_animation);
mAnimationScale = AnimationUtils.loadAnimation(this,R.anim.scale_animation);
mAnimationTranslate = AnimationUtils.loadAnimation(this,R.anim.translate_animation);
mAnimationRotate = AnimationUtils.loadAnimation(this,R.anim.rotate_animation);
}
public boolean onKeyUp(int keyCode, KeyEvent event)
{
switch ( keyCode )
{
case KeyEvent.KEYCODE_1:
mAnimImage.startAnimation(mAnimationAlpha);
break;
case KeyEvent.KEYCODE_2:
mAnimImage.startAnimation(mAnimationScale);
break;
case KeyEvent.KEYCODE_3:
mAnimImage.startAnimation(mAnimationTranslate);
break;
case KeyEvent.KEYCODE_4:
mAnimImage.startAnimation( mAnimationRotate);
break;
case KeyEvent.KEYCODE_5:
mAnimImage.startAnimation(new ViewAnimation());
break;
}
return true;
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ( keyCode == KeyEvent.KEYCODE_BACK)
{
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
3 Frame动画
Frame 动画是顺序播放事先做好的图片。可以在XML Resource定义,也可以使AnimationDrawable中的API定义。
3.1Frame动画实现
定义XML文件
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/a1" android:duration="500" />
<item android:drawable="@drawable/a2" android:duration="500" />
<item android:drawable="@drawable/a3" android:duration="500" />
<item android:drawable="@drawable/a4" android:duration="500" />
<item android:drawable="@drawable/a5" android:duration="500" />
<item android:drawable="@drawable/a6" android:duration="500" />
<item android:drawable="@drawable/a7" android:duration="500" />
<item android:drawable="@drawable/a8" android:duration="500" />
<item android:drawable="@drawable/a9" android:duration="500" />
<item android:drawable="@drawable/a10" android:duration="500" />
<item android:drawable="@drawable/a11" android:duration="500" />
<item android:drawable="@drawable/a12" android:duration="500" />
<item android:drawable="@drawable/a13" android:duration="500" />
<item android:drawable="@drawable/a14" android:duration="500" />
<item android:drawable="@drawable/a15" android:duration="500" />
</animation-list>
定义动画类
public class GameView extends View
{
private AnimationDrawable frameAnimation = null;
Context mContext = null;
public GameView(Context context)
{
super(context);
mContext = context;
ImageView img = new ImageView(mContext);
img.setBackgroundResource(R.anim.frameanimation);
frameAnimation = (AnimationDrawable) img.getBackground();
frameAnimation.setOneShot( false );
this.setBackgroundDrawable(frameAnimation);
}
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
}
public boolean onKeyUp(int keyCode, KeyEvent event)
{
switch ( keyCode )
{
case KeyEvent.KEYCODE_DPAD_UP:
frameAnimation.start();
break;
}
return true;
}
}
开启动画
public class Activity01 extends Activity
{
private GameView mGameView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mGameView = new GameView(this);
setContentView(mGameView);
}
public boolean onKeyUp(int keyCode, KeyEvent event)
{
if ( mGameView == null )
{
return false;
}
mGameView.onKeyUp(keyCode,event);
return true;
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ( mGameView == null )
{
return false;
}
if ( keyCode == KeyEvent.KEYCODE_BACK)
{
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
AlphaAnimation
渐变透明度动画效果
ScaleAnimation
渐变尺寸伸缩动画效果
TranslateAnimation
画面转换位置移动动画效果
RotateAnimation
画面转移旋转动画效果
//定义变量
private Animation myAnimation_Alpha;
private Animation myAnimation_Scale;
private Animation myAnimation_Translate;
private Animation myAnimation_Rotate;
myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);
//第一个参数fromAlpha为 动画开始时候透明度
//第二个参数toAlpha为 动画结束时候透明度
myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
//第一个参数fromX为动画起始时 X坐标上的伸缩尺寸
//第二个参数toX为动画结束时 X坐标上的伸缩尺寸
//第三个参数fromY为动画起始时Y坐标上的伸缩尺寸
//第四个参数toY为动画结束时Y坐标上的伸缩尺寸
//第五个参数pivotXType为动画在X轴相对于物件位置类型
//第六个参数pivotXValue为动画相对于物件的X坐标的开始位置
//第七个参数pivotXType为动画在Y轴相对于物件位置类型
//第八个参数pivotYValue为动画相对于物件的Y坐标的开始位置
myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);
//第一个参数fromXDelta为动画起始时 X坐标上的移动位置
//第二个参数toXDelta为动画结束时 X坐标上的移动位置
//第三个参数fromYDelta为动画起始时Y坐标上的移动位置
//第四个参数toYDelta为动画结束时Y坐标上的移动位置
myAnimation_Rotate=new RotateAnimation(0.0f,350.0f,Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIV E_TO_SELF, 0.5f);
//第一个参数fromDegrees为动画起始时的旋转角度
//第二个参数toDegrees为动画旋转到的角度
//第三个参数pivotXType为动画在X轴相对于物件位置类型
//第四个参数pivotXValue为动画相对于物件的X坐标的开始位
//第五个参数pivotXType为动画在Y轴相对于物件位置类型
//第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置
2.3自定义动画
除了以上4类动画外,在代码中继承android.view.animation.Animation类来实现自定义效果。通过重写Animation的applyTransformation(float interpolatedTime, Transformation t)函数来实现自定义动画效果。
在绘制动画的过程中会反复的调用applyTransformation函数,每次调用参数interpolatedTime值都会变化,该参数从0渐 变为1,当该参数为1时表明动画结束。通过参数Transformation 来获取变换的矩阵(matrix),通过改变矩阵就可以实现各种复杂的效果。
自定义图片旋转效果动画代码。
class ViewAnimation extends Animation
{
int mCenterX;
int mCenterY;
Camera camera = new Camera();
public ViewAnimation()
{
}
@Override
public void initialize(int width, int height, int parentWidth,
int parentHeight)
{
super.initialize(width, height, parentWidth, parentHeight);
mCenterX = width/2;
mCenterY = height/2;
setDuration(2500);
setFillAfter(true);
// setRepeatCount(100);
setInterpolator(new LinearInterpolator());
}
@Override
protected void applyTransformation(float interpolatedTime,
Transformation t)
{
final Matrix matrix = t.getMatrix();
camera.save();
camera.translate(0.0f, 0.0f, (1300 - 1300.0f * interpolatedTime));
camera.rotateY(360 * interpolatedTime);
camera.getMatrix(matrix);
matrix.preTranslate(-mCenterX, -mCenterY);
matrix.postTranslate(mCenterX, mCenterY);
camera.restore();
}
}
camera.translate(0.0f, 0.0f, (1300 - 1300.0f * interpolatedTime))在第一次调用的时候interpolatedTime值为0,相当于把ImageView在Z轴后移1300像素, 然后逐步的往前移动到0,同时camera.rotateY(360 * interpolatedTime)函数又把ImageView沿Y轴翻转360度
2.4动画实现
在代码的一个activity中,将需要动画的控件与已定义的动画关联,开启动画
private Animation mAnimationXXX = null;//生明动画
ImageView mAnimImageX = null;//生明 ImageView控件(或者其它需要有动画的控件)
mAnimImageX = (ImageView) this.findViewById(R.id.anim_imageX);//取得图片资源
mAnimImageX.startAnimation(mAnimationXXX);//基于xml文件,开启动画
mAnimImageX.startAnimation(new ViewAnimation());//基于自定义控件,开启动画。
2.5图片旋转Demo
public class AnimationDemo extends Activity {
/** Called when the activity is first created. */
ImageView mAnimImage;
private Animation mAnimationAlpha = null;
private Animation mAnimationScale = null;
private Animation mAnimationTranslate = null;
private Animation mAnimationRotate = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mAnimImage = (ImageView) this.findViewById(R.id.anim_image1);
mAnimationAlpha = AnimationUtils.loadAnimation(this,R.anim.alpha_animation);
mAnimationScale = AnimationUtils.loadAnimation(this,R.anim.scale_animation);
mAnimationTranslate = AnimationUtils.loadAnimation(this,R.anim.translate_animation);
mAnimationRotate = AnimationUtils.loadAnimation(this,R.anim.rotate_animation);
}
public boolean onKeyUp(int keyCode, KeyEvent event)
{
switch ( keyCode )
{
case KeyEvent.KEYCODE_1:
mAnimImage.startAnimation(mAnimationAlpha);
break;
case KeyEvent.KEYCODE_2:
mAnimImage.startAnimation(mAnimationScale);
break;
case KeyEvent.KEYCODE_3:
mAnimImage.startAnimation(mAnimationTranslate);
break;
case KeyEvent.KEYCODE_4:
mAnimImage.startAnimation( mAnimationRotate);
break;
case KeyEvent.KEYCODE_5:
mAnimImage.startAnimation(new ViewAnimation());
break;
}
return true;
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ( keyCode == KeyEvent.KEYCODE_BACK)
{
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
3 Frame动画
Frame 动画是顺序播放事先做好的图片。可以在XML Resource定义,也可以使AnimationDrawable中的API定义。
3.1Frame动画实现
定义XML文件
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/a1" android:duration="500" />
<item android:drawable="@drawable/a2" android:duration="500" />
<item android:drawable="@drawable/a3" android:duration="500" />
<item android:drawable="@drawable/a4" android:duration="500" />
<item android:drawable="@drawable/a5" android:duration="500" />
<item android:drawable="@drawable/a6" android:duration="500" />
<item android:drawable="@drawable/a7" android:duration="500" />
<item android:drawable="@drawable/a8" android:duration="500" />
<item android:drawable="@drawable/a9" android:duration="500" />
<item android:drawable="@drawable/a10" android:duration="500" />
<item android:drawable="@drawable/a11" android:duration="500" />
<item android:drawable="@drawable/a12" android:duration="500" />
<item android:drawable="@drawable/a13" android:duration="500" />
<item android:drawable="@drawable/a14" android:duration="500" />
<item android:drawable="@drawable/a15" android:duration="500" />
</animation-list>
定义动画类
public class GameView extends View
{
private AnimationDrawable frameAnimation = null;
Context mContext = null;
public GameView(Context context)
{
super(context);
mContext = context;
ImageView img = new ImageView(mContext);
img.setBackgroundResource(R.anim.frameanimation);
frameAnimation = (AnimationDrawable) img.getBackground();
frameAnimation.setOneShot( false );
this.setBackgroundDrawable(frameAnimation);
}
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
}
public boolean onKeyUp(int keyCode, KeyEvent event)
{
switch ( keyCode )
{
case KeyEvent.KEYCODE_DPAD_UP:
frameAnimation.start();
break;
}
return true;
}
}
开启动画
public class Activity01 extends Activity
{
private GameView mGameView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mGameView = new GameView(this);
setContentView(mGameView);
}
public boolean onKeyUp(int keyCode, KeyEvent event)
{
if ( mGameView == null )
{
return false;
}
mGameView.onKeyUp(keyCode,event);
return true;
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ( mGameView == null )
{
return false;
}
if ( keyCode == KeyEvent.KEYCODE_BACK)
{
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
展开全部
.....楼上复制帝啊。。。
随便定义一个AnimationSet as吧(onCreate前,共用)
然后你自己选择是触发按钮还是开始时同时处理啥的~触发两个动画的处理
随便写了
suofang();
yidong();
下面定义下。。。。。。
private void suofang()}
as= new AnimationSet(true);//定义一个新AnimationSet
ScaleAnimation sa = new ScaleAnimation(开始x坐标伸缩尺寸,开始y坐标伸缩尺寸,)
结束x坐标伸缩尺寸,结束y坐标伸缩尺寸,x轴的百分比,y轴的百分比)//全员float可,
前4个伸缩尺寸0.0伸缩到没有,1.0正常,大于1.0放大
sa.setDuration(动画的时间long型);
as.addAnimation(sa);
这个位置写需要动画的组件你自己定义的image1,button1什么的.startAnimation(as);
}
private void yidong(){
as = new Animation(true);
TranslateAnimation ta = new TranslateAnimation(开始x坐标,开始y坐标,结束x坐标,结束y坐标);
ta.setDuration();
as.addAnimation(ta);
.startAnimation(as);//跟前面一样的地方就不写了。。。比较懒。。。
}
随便定义一个AnimationSet as吧(onCreate前,共用)
然后你自己选择是触发按钮还是开始时同时处理啥的~触发两个动画的处理
随便写了
suofang();
yidong();
下面定义下。。。。。。
private void suofang()}
as= new AnimationSet(true);//定义一个新AnimationSet
ScaleAnimation sa = new ScaleAnimation(开始x坐标伸缩尺寸,开始y坐标伸缩尺寸,)
结束x坐标伸缩尺寸,结束y坐标伸缩尺寸,x轴的百分比,y轴的百分比)//全员float可,
前4个伸缩尺寸0.0伸缩到没有,1.0正常,大于1.0放大
sa.setDuration(动画的时间long型);
as.addAnimation(sa);
这个位置写需要动画的组件你自己定义的image1,button1什么的.startAnimation(as);
}
private void yidong(){
as = new Animation(true);
TranslateAnimation ta = new TranslateAnimation(开始x坐标,开始y坐标,结束x坐标,结束y坐标);
ta.setDuration();
as.addAnimation(ta);
.startAnimation(as);//跟前面一样的地方就不写了。。。比较懒。。。
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |