属性动画平移、旋转

一、xml

<ImageView
        android:id="@+id/imag"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@drawable/ic_launcher_background"
        />

二、Activity


public class MainActivity extends AppCompatActivity {

    private ImageView imagbabi;
    private LinearLayout root;
    private int width;
    private int height;
    private AnimatorSet animatorSet;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imagbabi = findViewById(R.id.imag);
        root = findViewById(R.id.ly_root);
        ObjectAnimator translationY = ObjectAnimator.ofFloat(imagbabi, "translationY", imagbabi.getTranslationY(), 800);
        ObjectAnimator rotation = ObjectAnimator.ofFloat(imagbabi, "rotation", 0, 360);
        ObjectAnimator alpha = ObjectAnimator.ofFloat(imagbabi, "alpha", 1, 2, 3);
        ObjectAnimator scaleX = ObjectAnimator.ofFloat(imagbabi, "scaleX", 0, 1);
        animatorSet = new AnimatorSet();
        animatorSet.play(translationY).with(rotation).with(alpha).with(scaleX);
        animatorSet.setDuration(5000);
        animatorSet.start();
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                     startActivity(new Intent(MainActivity.this,ShowActivity.class));
                     finish();
            }
        },5000);


    }
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,针对你的问题,我可以给出一些指导。 要在 Android 上实现方块的平移动画,你可以使用 Android 提供的动画类。其中,最常用的是属性动画类 ValueAnimator。ValueAnimator 可以让你在指定的时间范围内,根据某个属性的变化,实现动画效果。 要实现方块的平移动画,你需要先创建一个 View,然后在 ValueAnimator 中指定该 View 的 X、Y 坐标。在动画执行期间,ValueAnimator 会不断地修改 View 的坐标,并在每次修改后,调用 View 的 invalidate() 方法,以便该 View 重新绘制。 下面是一个简单的例子,演示如何使用 ValueAnimator 实现方块的平移动画: ```java public class MainActivity extends AppCompatActivity { private View mBlock; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBlock = findViewById(R.id.block); ValueAnimator animator = ValueAnimator.ofFloat(0, 1); animator.setDuration(1000); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (float) animation.getAnimatedValue(); int x = (int) (value * getWidth()); int y = (int) (value * getHeight()); mBlock.setTranslationX(x); mBlock.setTranslationY(y); } }); animator.start(); } } ``` 对于你提到的在 SurfaceView 中实现动画旋转图像,实现方式与普通的 View 相比略有不同。你需要自己手动绘制图像,并在每次绘制之后,将图像旋转一定角度。下面是一个简单的例子,演示如何在 SurfaceView 中实现动画旋转图像: ```java public class MySurfaceView extends SurfaceView implements Runnable { private SurfaceHolder mHolder; private Thread mThread; private boolean mIsRunning; private Bitmap mBitmap; private Matrix mMatrix; public MySurfaceView(Context context) { super(context); init(); } public MySurfaceView(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { mHolder = getHolder(); mIsRunning = true; mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.block); mMatrix = new Matrix(); } @Override public void run() { while (mIsRunning) { if (!mHolder.getSurface().isValid()) { continue; } Canvas canvas = mHolder.lockCanvas(); canvas.drawColor(Color.WHITE); // 计算旋转角度,并旋转图像 float angle = System.currentTimeMillis() % 360; mMatrix.reset(); mMatrix.postRotate(angle, mBitmap.getWidth() / 2, mBitmap.getHeight() / 2); mMatrix.postTranslate(getWidth() / 2 - mBitmap.getWidth() / 2, getHeight() / 2 - mBitmap.getHeight() / 2); // 绘制图像 canvas.drawBitmap(mBitmap, mMatrix, null); mHolder.unlockCanvasAndPost(canvas); } } public void start() { mThread = new Thread(this); mThread.start(); } public void stop() { mIsRunning = false; try { mThread.join(); } catch (InterruptedException e) { e.printStackTrace(); } } } ``` 在上述代码中,我们通过继承 SurfaceView,并实现 Runnable 接口来创建自己的 SurfaceView。在 run() 方法中,我们不断地绘制图像,并在每次绘制之前计算旋转角度,然后使用 Matrix 来旋转图像。最后,我们将绘制好的图像显示在 SurfaceView 上。 为了启动和停止动画,你可以在 Activity 中调用 start() 和 stop() 方法: ```java public class MainActivity extends AppCompatActivity { private MySurfaceView mSurfaceView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSurfaceView = findViewById(R.id.surface_view); mSurfaceView.start(); } @Override protected void onDestroy() { super.onDestroy(); mSurfaceView.stop(); } } ``` 上述代码演示了如何在 SurfaceView 中实现动画旋转图像。如果你想进一步了解如何在 Android 上实现动画效果,可以查看 Android 官方文档中有关动画的章节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值