温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用TransitionDrawable怎么实现实现多张图片淡入淡出效果

发布时间:2021-06-04 17:06:52 来源:亿速云 阅读:239 作者:Leah 栏目:移动开发

使用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;//结束线程   } }

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI