当前位置: 首页 > wzjs >正文

网站建设模式有哪些google安卓手机下载

网站建设模式有哪些,google安卓手机下载,python能做网站开发吗,太原网站制作在线Android动画:属性动画以及实现点击图标缩放的动画效果 1.背景 1.补间动画功能单调只有四种 2.补间动画只针对UI 3.补间动画只改变View的显示效果,不会改变View的属性 2.相关API Animator 创建属性动画的基类,一般不直接用 ValueAnimator 属性…

Android动画:属性动画以及实现点击图标缩放的动画效果

1.背景

1.补间动画功能单调只有四种
2.补间动画只针对UI
3.补间动画只改变View的显示效果,不会改变View的属性

2.相关API

Animator
创建属性动画的基类,一般不直接用

ValueAnimator
属性动画是通过怖不安的修改值来实现的,而初始值和结束值之间的过渡动画是由该类来负责计算的。
只需要将初始值和结束值提供给他,并提供动画所需市场,该类就会自动帮我们完成从初始值平滑过渡到结束值这样的结果。另外,该类还负责管理动画的播放次数和播放模式,以及对动画设置监听器等

ObjectAnimator
ValueAnimator的子类,允许我们对指定对象的属性执行动画。

AnimatorSet
Animator的子类,用于组合多个Animator,并指定多个Animator按照次序播放还是同时播放

Evaluator
告诉动画如何从初始值过渡到结束值
IntEvaluator:用于计算int类型属性值的计算器
FloatEvaluator:用于计算float类型属性值的计算器
ArgbEvaluator:用于计算十六进制形式表示的颜色值的计算器
TypeEvaluate:计算器的接口,实现它来完成自定义计算器

3.ValueAnimator的简单使用

  • 1.调用ValueAnimator的ofInt(),ofFloat()或ofObject()静态方法创建ValueAnimator实例

  • 2.调用实例的setXxx方法设置动画持续时间,插值方式,重复次数等

  • 3.调用实例的addUpdateListener添加AnimatorUpdateListener监听器,在该监听器中 可以获得ValueAnimator计算出来的值,你可以值应用到指定对象上~

  • 4.调用实例的**start()**方法开启动画! 另外我们可以看到ofInt和ofFloat都有个这样的参数:float/int… values代表可以多个值!

    构建一个xml,四个按钮一个imageView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/ly_root"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/btn_one"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="动画1" /><Buttonandroid:id="@+id/btn_two"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="动画2" /><Buttonandroid:id="@+id/btn_three"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="动画3" /><Buttonandroid:id="@+id/btn_four"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="动画4" /><ImageViewandroid:id="@+id/img_babi"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:background="@drawable/img_babi" /></LinearLayout>

来到mainactivity,首先需要一个修改View位置的方法,调用moveView()设置缩编和上边的起始坐标以及宽高,接着定义四个动画,分别是:直线移动,缩放,旋转加透明,以及圆形旋转

public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btn_one;private Button btn_two;private Button btn_three;private Button btn_four;private LinearLayout ly_root;private ImageView img_babi;private int width;private int height;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bindViews();}private void bindViews() {ly_root = (LinearLayout) findViewById(R.id.ly_root);btn_one = (Button) findViewById(R.id.btn_one);btn_two = (Button) findViewById(R.id.btn_two);btn_three = (Button) findViewById(R.id.btn_three);btn_four = (Button) findViewById(R.id.btn_four);img_babi = (ImageView) findViewById(R.id.img_babi);btn_one.setOnClickListener(this);btn_two.setOnClickListener(this);btn_three.setOnClickListener(this);btn_four.setOnClickListener(this);img_babi.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_one:lineAnimator();break;case R.id.btn_two:scaleAnimator();break;case R.id.btn_three:raAnimator();break;case R.id.btn_four:circleAnimator();break;case R.id.img_babi:Toast.makeText(MainActivity.this, "ffffffffffftws", Toast.LENGTH_SHORT).show();break;}}//定义一个修改ImageView位置的方法private void moveView(View view, int rawX, int rawY) {int left = rawX - img_babi.getWidth() / 2;int top = rawY - img_babi.getHeight();int width = left + view.getWidth();int height = top + view.getHeight();view.layout(left, top, width, height);}//定义属性动画的方法://按轨迹方程来运动private void lineAnimator() {width = ly_root.getWidth();height = ly_root.getHeight();ValueAnimator xValue = ValueAnimator.ofInt(height,0,height / 4,height / 2,height / 4 * 3 ,height);xValue.setDuration(3000L);xValue.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {// 轨迹方程 x = width / 2int y = (Integer) animation.getAnimatedValue();int x = width / 2;moveView(img_babi, x, y);}});xValue.setInterpolator(new LinearInterpolator());xValue.start();}//缩放效果private void scaleAnimator(){//组合动画的实现final float scale = 0.5f;AnimatorSet scaleSet = new AnimatorSet();ValueAnimator valueAnimatorSmall = ValueAnimator.ofFloat(1.0f, scale);valueAnimatorSmall.setDuration(500);ValueAnimator valueAnimatorLarge = ValueAnimator.ofFloat(scale, 1.0f);valueAnimatorLarge.setDuration(500);valueAnimatorSmall.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {float scale = (Float) animation.getAnimatedValue();img_babi.setScaleX(scale);img_babi.setScaleY(scale);}});valueAnimatorLarge.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {float scale = (Float) animation.getAnimatedValue();img_babi.setScaleX(scale);img_babi.setScaleY(scale);}});scaleSet.play(valueAnimatorLarge).after(valueAnimatorSmall);scaleSet.start();//不组合也可以实现
//        ValueAnimator vValue = ValueAnimator.ofFloat(1.0f, 0.6f, 1.2f, 1.0f, 0.6f, 1.2f, 1.0f);
//        vValue.setDuration(1000L);
//        vValue.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
//            @Override
//            public void onAnimationUpdate(ValueAnimator animation) {
//                float scale = (Float) animation.getAnimatedValue();
//                img_babi.setScaleX(scale);
//                img_babi.setScaleY(scale);
//            }
//        });
//        vValue.setInterpolator(new LinearInterpolator());
//        vValue.start();}//旋转的同时透明度变化private void raAnimator(){ValueAnimator rValue = ValueAnimator.ofInt(0, 360);rValue.setDuration(1000L);rValue.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {int rotateValue = (Integer) animation.getAnimatedValue();img_babi.setRotation(rotateValue);float fractionValue = animation.getAnimatedFraction();img_babi.setAlpha(fractionValue);}});rValue.setInterpolator(new DecelerateInterpolator());rValue.start();}//圆形旋转protected void circleAnimator() {width = ly_root.getWidth();height = ly_root.getHeight();final int R = width / 4;ValueAnimator tValue = ValueAnimator.ofFloat(0,(float) (2.0f * Math.PI));tValue.setDuration(1000);tValue.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {// 圆的参数方程 x = R * sin(t) y = R * cos(t)float t = (Float) animation.getAnimatedValue();int x = (int) (R * Math.sin(t) + width / 2);int y = (int) (R * Math.cos(t) + height / 2);moveView(img_babi, x, y);}});tValue.setInterpolator(new DecelerateInterpolator());tValue.start();}
}

在这里插入图片描述

核心流程:先创建ValueAnimator对象,调用ValueAnimator.ofInt/ofFloat 获得,然后设置动画持续时间,addUpdateListener添加AnimatorUpdateListener事件监听, 然后使用参数animationgetAnimatedValue()获得当前的值,然后我们可以拿着这个值 来修改View的一些属性,从而形成所谓的动画效果,接着设置setInterpolator动画渲染模式, 最后调用start()开始动画的播放~

4.ObjectAnimator简单使用

比起ValueAnimator,ObjectAnimator显得更为易用,通过该类我们可以直接 对任意对象的任意属性进行动画操作!没错,是任意对象,而不单单只是View对象, 不断地对对象中的某个属性值进行赋值,然后根据对象属性值的改变再来决定如何展现 出来!比如为TextView设置如下动画: ObjectAnimator.ofFloat(textview, “alpha”, 1f, 0f);
这里就是不断改变alpha的值,从1f - 0f,然后对象根据属性值的变化来刷新界面显示,从而 展现出淡入淡出的效果,而在TextView类中并没有alpha这个属性,ObjectAnimator内部机制是: 寻找传输的属性名对应的get和set方法~,而非找这个属性值! 不信的话你可以到TextView的源码里找找是否有alpha这个属性! 好的,下面我们利用ObjectAnimator来实现四种补间动画的效果吧~

public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btn_one;private Button btn_two;private Button btn_three;private Button btn_four;private Button btn_five;private LinearLayout ly_root;private TextView tv_pig;private int height;private ObjectAnimator animator1;private ObjectAnimator animator2;private ObjectAnimator animator3;private ObjectAnimator animator4;private AnimatorSet animSet;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bindViews();initAnimator();}private void bindViews() {ly_root = (LinearLayout) findViewById(R.id.ly_root);btn_one = (Button) findViewById(R.id.btn_one);btn_two = (Button) findViewById(R.id.btn_two);btn_three = (Button) findViewById(R.id.btn_three);btn_four = (Button) findViewById(R.id.btn_four);btn_five = (Button) findViewById(R.id.btn_five);tv_pig = (TextView) findViewById(R.id.tv_pig);height = ly_root.getHeight();btn_one.setOnClickListener(this);btn_two.setOnClickListener(this);btn_three.setOnClickListener(this);btn_four.setOnClickListener(this);btn_five.setOnClickListener(this);tv_pig.setOnClickListener(this);}//初始化动画private void initAnimator() {animator1 = ObjectAnimator.ofFloat(tv_pig, "alpha", 1f, 0f, 1f, 0f, 1f);animator2 = ObjectAnimator.ofFloat(tv_pig, "rotation", 0f, 360f, 0f);animator3 = ObjectAnimator.ofFloat(tv_pig, "scaleX", 2f, 4f, 1f, 0.5f, 1f);animator4 = ObjectAnimator.ofFloat(tv_pig, "translationY", height / 8, -100, height / 2);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_one:animator1.setDuration(3000l);animator1.start();break;case R.id.btn_two:animator2.setDuration(3000l);animator2.start();break;case R.id.btn_three:animator3.setDuration(3000l);animator3.start();break;case R.id.btn_four:animator4.setDuration(3000l);animator4.start();break;case R.id.btn_five://将前面的动画集合到一起~animSet = new AnimatorSet();animSet.play(animator4).with(animator3).with(animator2).after(animator1);animSet.setDuration(5000l);animSet.start();break;case R.id.tv_pig:Toast.makeText(MainActivity.this, "tttttttttt", Toast.LENGTH_SHORT).show();break;}}
}

把imageView改成了textView,对里面的属性继续宁修改

5.组合动画与AnimatorListener

从上面两个例子中我们都体验了一把组合动画,用到了AnimatorSet这个类!

我们调用的play()方法,然后传入第一个开始执行的动画,此时他会返回一个Builder类给我们:

img

接下来我们可以调用Builder给我们提供的四个方法,来组合其他的动画:

  • after(Animator anim) 将现有动画插入到传入的动画之后执行
  • after(long delay) 将现有动画延迟指定毫秒后执行
  • before(Animator anim) 将现有动画插入到传入的动画之前执行
  • with(Animator anim) 将现有动画和传入的动画同时执行

嗯,很简单,接下来要说下动画事件的监听,上面我们ValueAnimator的监听器是 AnimatorUpdateListener,当值状态发生改变时候会回调onAnimationUpdate方法!

除了这种事件外还有:动画进行状态的监听~ AnimatorListener,我们可以调用addListener方法 添加监听器,然后重写下面四个回调方法:

  • onAnimationStart():动画开始
  • onAnimationRepeat():动画重复执行
  • onAnimationEnd():动画结束
  • onAnimationCancel():动画取消

没错,加入你真的用AnimatorListener的话,四个方法你都要重写,当然和前面的手势那一节一样, Android已经给我们提供好一个适配器类:AnimatorListenerAdapter,该类中已经把每个接口 方法都实现好了,所以我们这里只写一个回调方法也可以额!

6.使用XML来编写动画

使用XML来编写动画,画的时间可能比Java代码长一点,但是重用起来就轻松很多! 对应的XML标签分别为:<animator><objectAnimator><set> 相关的属性解释如下:

  • android:ordering:指定动画的播放顺序:sequentially(顺序执行),together(同时执行)
  • android:duration:动画的持续时间
  • android:propertyName=“x”:这里的x,还记得上面的"alpha"吗?加载动画的那个对象里需要 定义getx和setx的方法,objectAnimator就是通过这里来修改对象里的值的!
  • android:valueFrom=“1” :动画起始的初始值
  • android:valueTo=“0” :动画结束的最终值
  • android:valueType=“floatType”:变化值的数据类型

7.使用例子如下

从0到100平滑过渡的动画

<animator xmlns:android="http://schemas.android.com/apk/res/android"  android:valueFrom="0"  android:valueTo="100"  android:valueType="intType"/>

将一个视图的alpha属性从1变成0

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"  android:valueFrom="1"  android:valueTo="0"  android:valueType="floatType"  android:propertyName="alpha"/>

set动画使用演示

<set android:ordering="sequentially" ><set><objectAnimatorandroid:duration="500"android:propertyName="x"android:valueTo="400"android:valueType="intType" /><objectAnimatorandroid:duration="500"android:propertyName="y"android:valueTo="300"android:valueType="intType" /></set><objectAnimatorandroid:duration="500"android:propertyName="alpha"android:valueTo="1f" />
</set>

加载我们的动画文件

AnimatorSet set = (AnimatorSet)AnimatorInflater.loadAnimator(mContext, R.animator.property_animator);  
animator.setTarget(view);  
animator.start();  

7Interpolator(补间器)

img

8.ViewPropertyAnimator

3.1后系统当中附增的一个新的功能,为View的动画操作提供一种更加便捷的用法! 假如是以前,让一个TextView从正常状态变成透明状态,会这样写:

ObjectAnimator animator = ObjectAnimator.ofFloat(textview, "alpha", 0f);  
animator.start();

而使用ViewPropertyAnimator来实现同样的效果则显得更加易懂:

textview.animate().alpha(0f); 

还支持连缀用法,组合多个动画,设定时长,设置Interpolator等~

textview.animate().x(500).y(500).setDuration(5000)  .setInterpolator(new BounceInterpolator());

9.给新闻下面的菜单栏加上缩放小动画

这里比较简单,给大家提供一下思路,把每个菜单栏对应的图标和文字绑定在一起,当点击事件出发的时候调动画就可以了。

//    private void initBottomNavigation() {
//        // 获取底部导航栏的各个菜单项
//        homeTab = findViewById(R.id.home_tab);
//        menuTab = findViewById(R.id.menu_tab);
//        mineTab = findViewById(R.id.mine_tab);
//
//        homeText = findViewById(R.id.home_text);
//        menuText = findViewById(R.id.menu_text);
//        mineText = findViewById(R.id.mine_text);
//
//        // 设置点击事件
//        homeTab.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//
//                    animateTabSelection(homeTab, homeText);
//                    selectedTab = 0;
//
//            }
//        });
//
//        menuTab.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//
//                    animateTabSelection(menuTab, menuText);
//                    selectedTab = 1;
//
//            }
//        });
//
//        mineTab.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//
//                    animateTabSelection(mineTab, mineText);
//                    selectedTab = 2;
//
//            }
//        });
//    }//    private void animateTabSelection(LinearLayout tab, TextView text) {
//
//        ScaleAnimation scaleAnimation = new ScaleAnimation(
//                1.0f, 0.9f, 1.0f, 0.9f,
//                Animation.RELATIVE_TO_SELF, 0.5f,
//                Animation.RELATIVE_TO_SELF, 0.5f
//        );
//
//        scaleAnimation.setDuration(150);
//        scaleAnimation.setRepeatCount(1);
//        scaleAnimation.setRepeatMode(Animation.REVERSE);
//
//        tab.startAnimation(scaleAnimation);
//        text.startAnimation(scaleAnimation);
//    }

可以编写更有趣的动画,这里用的默认的。

http://www.dtcms.com/wzjs/10757.html

相关文章:

  • 贵州建设项目门户网站沈阳专业seo
  • 网站建设维护协议网站免费进入窗口软件有哪些
  • 网站的设计流程电商网站设计论文
  • 建设网站运营收入夫唯老师seo
  • 做网站一年大概的盈利凡科建站代理登录
  • 网络广告有哪些形式seo排名的公司
  • 做网站投诉要钱吗色盲测试图第五版
  • 芷江建设局网站谷歌浏览器官方正版下载
  • 站长做什么网站赚钱优化标题关键词技巧
  • 飞扬动力网站建设网络推广工作怎么样
  • 网站界面设计论文企业网站搜索优化网络推广
  • c 网站开发需要什么软件百度推广登录首页网址
  • wordpress设置用户组seo自学
  • k网站建设网址大全浏览器
  • 域名 网站 区别南宁百度关键词排名公司
  • 先学php还是网站建设seo人员培训
  • 贵港网站建设公司广东seo推广外包
  • 家里的电脑ip做网站网站统计分析工具
  • 中国空间站有几个舱段竞价排名点击
  • 网站广审怎么做今日头条新闻10条
  • 手机端网站怎么做收录批量查询工具
  • 国外有个专门做麋鹿测试的网站四川刚刚发布的最新新闻
  • 新网域名转出快手seo
  • 腾讯建站平台官网windows优化大师值得买吗
  • 企业展厅建造方法新网站seo外包
  • 广东品牌网站建设报价什么是网络推广
  • 软件开发报价单网站文章优化技巧
  • 网站建设哪些好企业网站seo推广方案
  • 做网站15年百度一下官网网址
  • 酒类网站建设方案app开发多少钱