资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

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

使用TransitionDrawable怎么实现实现多张图片淡入淡出效果?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

我们提供的服务有:网站设计、成都网站建设、微信公众号开发、网站优化、网站认证、射阳ssl等。为超过千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的射阳网站制作公司

一、两张图片的切换效果,轻松实现

//讲需要切换的两张图片直接给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;//结束线程

  }
}

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


本文标题:使用TransitionDrawable怎么实现实现多张图片淡入淡出效果
文章网址:http://www.cdkjz.cn/article/gdepji.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220