在android的xml和java代码中使用透明度动画

在xml中定义透明动画

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:fillAfter="true"
    android:fromAlpha="1.0"
    android:toAlpha="0.3"></alpha>

不知道为什么,在我的AndroidStudio中,使用自定提示功能只提示开始透明度值和结束透明度值这两个属性,希望知道的朋友可以告诉我一下为什么,是不是我的AS设置有问题!
在Activity中通过使用AnimationUtils工具类来加载在xml中定义的动画,具体的代码如下所示:

package com.example.alpha;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.view.animation.AlphaAnimation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {

    ImageView image;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        image = (ImageView)findViewById(R.id.image_view);
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        final AlphaAnimation alpha = (AlphaAnimation) AnimationUtils.loadAnimation(MainActivity.this,R.anim.alpha);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                image.startAnimation(alpha);
            }
        });
        setImageView();
    }

    private void setImageView(){
        float density = getResources().getDisplayMetrics().density;
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.test,options);
        int width = options.outWidth;
        int height = options.outHeight;
        int sample = 1;
        if (width>image.getWidth() || height>image.getHeight()){
            sample = (int) Math.max(width/(200*density),height/(200*density));
        }
        options.inSampleSize = sample;
        options.inJustDecodeBounds = false;
        mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.test,options);
        image.setImageBitmap(mBitmap);
    }
}

当然也可以在java中定义透明度动画(google考虑的还是非常周到的)

    private AlphaAnimation getAlphaAnimation(){
        AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f,0.3f);
        alphaAnimation.setDuration(3000);
        alphaAnimation.setFillAfter(true);
        return alphaAnimation;
    }

注:其实通过查看AlphaAnimation的源代码,是可以看出在xml中使用alpha动画时能够设置的属性名称的!
布局文件代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/content_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorAccent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.example.alpha.MainActivity"
    tools:showIn="@layout/activity_main">

    <ImageView
        android:id="@+id/image_view"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_centerInParent="true" />
</RelativeLayout>

这里写图片描述

将android:fillAfter=”true”这个属性设置为false可以让动画结束后恢复到初始状态,还有其他有意思的属性,感兴趣的朋友可以自己试一下!

这是我的个人公众号:希望您可以关注一下,这将是对我最大的鼓励!
这里写图片描述
代码地址:
GitHub地址,后期所有与动画相关的代码都会存入这个GitHub仓库中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值