您好,登錄后才能下訂單哦!
使用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;//結束線程 } }
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。