91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用TransitionDrawable怎么實現實現多張圖片淡入淡出效果

發布時間:2021-06-04 17:06:52 來源:億速云 閱讀:183 作者: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

余干县| 胶州市| 湘西| 工布江达县| 应城市| 惠水县| 库车县| 高陵县| 凭祥市| 大悟县| 唐山市| 石家庄市| 体育| 安岳县| 安吉县| 军事| 磐安县| 青铜峡市| 泸州市| 海淀区| 岳池县| 黄龙县| 阳曲县| 克东县| 苍南县| 封丘县| 黄梅县| 含山县| 漳浦县| 翁牛特旗| 保靖县| 始兴县| 临桂县| 西华县| 蒙阴县| 睢宁县| 桐城市| 台中县| 浪卡子县| 阳朔县| 广宗县|