使用TransitionDrawable怎么实现实现多张图片淡入淡出效果?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
一、两张图片的切换效果,轻松实现
//讲需要切换的两张图片直接给TransitionDrawable对象
TransitionDrawable transitionDrawable = new TransitionDrawable(new Drawable[]{getResources().getDrawable(R.drawable.advertiseone),getResources().getDrawable(R.drawable.advertisetwo)});
//一样用
imgAdvertise.setImageDrawable(transitionDrawable);
//切换图片的时间间隔
transitionDrawable.startTransition(3000);
二、切换多张图片
实现思路,通过开启一个线程(死循环),每隔一段时间发送消息到UI主线程中替换主线程中的transitionDrawable对象中的图片就可以了,需要用到handler。这里实现在广告倒计时中无限循环图片切换的次数
package com.coofond.carservice;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.TransitionDrawable;
import android.os.Build;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.coofond.carservice.mine.ui.LoginAct;
/**
* Created by IBM on 2016/10/7.
*/
public class WelcomeAct extends AppCompatActivity {
private TextView tvTimecount;
private ImageView imgAdvertise;
private int adTime = 6000;//倒计时秒数
private int timeInterval = 1000;//倒计时间隔
private CountDownTimer mTimer;//计时器
private int change = 0;//记录下标
private int[] ids = new int[]{R.drawable.advertiseone, R.drawable.advertisetwo, R.drawable.advertisethree};
private Drawable[] drawables;//图片集合
private Thread mThread;//线程
private boolean mThreadFlag = true;//线程结束标志符
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_welcome);
initView();
initData();
initEvent();
}
//定义hander
private Handler mHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
int duration = msg.arg1;
TransitionDrawable transitionDrawable = new TransitionDrawable(new Drawable[]{drawables[change % ids.length],
drawables[(change + 1) % ids.length]});
change++;//改变标识位置
imgAdvertise.setImageDrawable(transitionDrawable);
transitionDrawable.startTransition(duration);
return false;
}
});
//开启线程发送消息,让transition一直在改变
private class MyRunnable implements Runnable {
@Override
public void run() {
//这个while(true)是做死循环
while (mThreadFlag) {
int duration = 1000;//改变的间隔
Message message = mHandler.obtainMessage();
message.arg1 = duration;
mHandler.sendMessage(message);
try {
Thread.sleep(duration);
//隔duration秒发送一次
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
private void initView() {
tvTimecount = (TextView) findViewById(R.id.tv_advert);
imgAdvertise = (ImageView) findViewById(R.id.iv_advetise);
//填充图片
drawables=new Drawable[ids.length];
for (int i = 0; i < ids.length; i++) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
drawables[i] = getDrawable(ids[i]);
} else {
drawables[i] = getResources().getDrawable(ids[i]);
}
}
}
private void initData() {
// 初始化计时器,第一个参数是共要倒计时的秒数,第二个参数是倒计时的间隔
mTimer = new CountDownTimer(adTime, timeInterval) {
// 倒计时开始时要做的事情,参数m是直到完成的时间
@Override
public void onTick(long millisUntilFinished) {
tvTimecount.setText("" + millisUntilFinished / 1000 + "s跳过广告");
}
// 结束计时后要做的工作
@Override
public void onFinish() {
jumpActivity();
}
};
//开启计时器
mTimer.start();
//开启线程,改变transition,切换图片
mThread= new Thread(new MyRunnable());
mThread.start();
}
private void initEvent() {
tvTimecount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mTimer.cancel();
jumpActivity();
}
});
}
// 跳转页面
private void jumpActivity() {
//如果还没结束当前的页面,就结束
if (!isFinishing()) {
finish();
}
Intent it = new Intent(WelcomeAct.this, LoginAct.class);
startActivity(it);
}
@Override
protected void onDestroy() {
super.onDestroy();
//mThread.stop(); 不推荐使用
mThreadFlag=false;//结束线程
}
}
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。