GithubHelp home page GithubHelp logo

androidhomework3's Introduction

浙江大学安卓开发小学期 作业3

姓名:朱璟森

学号:3170104166

专业:计算机科学与技术


作业要求

创建一个Android app工程,实现

  • Scale动画、Alpha动画,并组合到AnimatorSet
  • 使用SeekBar操纵Lottie动画进度条
  • (选做)使用TabLayoutViewPager实现页面切换

作业实现

注:为了节省代码量,本次作业中的所有回调事件全部采用Lambda 表达式进行编写而非传统的诸如 new OnClickListener() {@Override ......}的形式。

启动程序主界面如下,共2个TAB,分别为Animator动画与Lottie动画的页面,分别为两个自定义的Fragment。右上角还有一个悬浮按钮:

1562773134421

1562773149559

第一个页面中有四个按钮与一个图片。

  • 中间的三个按钮点击后分别对图片施加动画效果,点击"SCALE"按钮后,图片放大至原来的2倍,点击"ALPHA"按钮后,图片的透明度缩小至0.1。这两个动画均为Animation而非Animator,而且会以REVERSE的模式循环执行一次,即放大至两倍后重新缩小回原形、变浅后变回原色。而"BOTH"按钮顾名思义即为两种动画效果的同时叠加,也会循环执行一次变回原形。下图为执行"BOTH"的中途截图:

1562773734155

  • 上方的"OBJECT ANIMATOR"按钮,点击后会对这个按钮本身执行一个以REVERSE的模式无限循环的ObjectAnimator,即放大变浅->缩小变深->放大变浅->缩小变深->...的循环。放大和变浅的同时实现就是使用的AnimatorSetplayTogether方法。由于Animator为属性动画,因此按钮放大后点击区域也会变大。中途截图如下:

1562773914395

第二个页面中,Lottie动画默认静止不播放,拖动进度条,Lottie动画就会快进到相应的进度,如图:

1562774005059

而点击左下角的播放按钮,就会播放一次Lottie动画。播放途中按钮与进度条被停用,播放完毕后重新启用。

进阶要求

除了基本要求,我还实现了一些额外的功能与效果:

ObjectAnimator的暂停

在第一个页面点击"OBJECT ANIMATOR"按钮后,按钮的点击事件变为暂停动画,即再次点击按钮后动画定格在点击时的状态,再次点击按钮,动画则又会从暂停时的动画继续。

新建Tab标签页

右上角的悬浮按钮的作用就在于新建标签页,点击后会弹出如下对话框 (AlertDialog) 选择想要新建的页面:

1562774414908

点击确认后就会新建页面并切换到新建的页面上:

1562774455690

由于每个页面均为Fragment,具有独立的生命周期,除非被系统销毁,否则各页面的状态会保持,例如此时滑动回TAB 2,进度条进度与之前一样。

换页动画

ViewPager滑动换页时,通过实现自定义ViewPager.PageTransformer接口,就可以做出自定义换页动画效果。本次作业中的效果为页面缩小并变浅 (Alpha变小) ,如下图所示:

1562774801595

总结心得

本次作业,巩固了课内内容,安卓的动画效果使得App界面显得更为炫酷,而Fragment得益于其生命周期,使得实现页面切换时不一定要创建新的Activity,更是为导航换页打下了基础。TabLayoutPageViewer的实现让我对Fragment的作用有了更深刻的理解,而PageViewer中实现Adapter与昨天的RecyclerView有着异曲同工之妙,温故而知新。最有挑战性的莫过于编写换页动画,经过不断的试错和努力终于实现了酷炫的换页效果。

androidhomework3's People

Contributors

jingsenzhu avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.