| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- package com.datarecovery.master.widget;
- import android.content.Context;
- import android.graphics.drawable.Drawable;
- import android.os.Handler;
- import android.text.TextUtils;
- import android.util.Pair;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.animation.AlphaAnimation;
- import android.view.animation.Animation;
- import android.view.animation.AnimationSet;
- import android.view.animation.TranslateAnimation;
- import android.widget.ViewSwitcher;
- import com.datarecovery.master.databinding.ViewHomePageSwitchTextBinding;
- import java.util.List;
- public class InformationSwitchBanner implements ViewSwitcher.ViewFactory, View.OnClickListener {
- private static final int DURATION = 1500;
- private final Context context;
- private final ViewSwitcher viewSwitcher;
- private final Handler handler = new Handler();
- LayoutInflater inflater;
- private List<Pair<CharSequence, CharSequence>> texts;
- private int marker;
- private AnimationSet InAnimationSet;
- private AnimationSet OutAnimationSet;
- private int delayTime = 1500;
- private OnSwitchListener onSwitchListener;
- public InformationSwitchBanner(Context context, ViewSwitcher textSwitcher) {
- this.context = context;
- this.viewSwitcher = textSwitcher;
- inflater = LayoutInflater.from(context);
- init();
- }
- private void init() {
- viewSwitcher.setFactory(this);
- setText("", "");
- createAnimation();
- viewSwitcher.setInAnimation(InAnimationSet);
- viewSwitcher.setOutAnimation(OutAnimationSet);
- viewSwitcher.setOnClickListener(this);
- }
- private void setText(CharSequence left, CharSequence right) {
- ViewHomePageSwitchTextBinding binding = ViewHomePageSwitchTextBinding.bind(viewSwitcher.getNextView());
- binding.tvSwitchText.setText(left);
- binding.tvSwitchDate.setText(right);
- binding.tvSwitchText.setVisibility(TextUtils.isEmpty(left) ? View.GONE : View.VISIBLE);
- binding.tvSwitchDate.setVisibility(TextUtils.isEmpty(right) ? View.GONE : View.VISIBLE);
- viewSwitcher.showNext();
- }
- public void setTextColor(Drawable leftDrawable, int padding, int prefixColor, int suffixColor) {
- ViewHomePageSwitchTextBinding currentView = ViewHomePageSwitchTextBinding.bind(viewSwitcher.getCurrentView());
- ViewHomePageSwitchTextBinding nextView = ViewHomePageSwitchTextBinding.bind(viewSwitcher.getNextView());
- currentView.tvSwitchText.setTextColor(prefixColor);
- nextView.tvSwitchText.setTextColor(prefixColor);
- currentView.tvSwitchDate.setTextColor(suffixColor);
- nextView.tvSwitchDate.setTextColor(suffixColor);
- leftDrawable.setBounds(0, 0, leftDrawable.getMinimumWidth(), leftDrawable.getMinimumHeight());
- currentView.tvSwitchText.setCompoundDrawablePadding(padding);
- nextView.tvSwitchText.setCompoundDrawablePadding(padding);
- currentView.tvSwitchText.setCompoundDrawables(leftDrawable, null, null, null);
- nextView.tvSwitchText.setCompoundDrawables(leftDrawable, null, null, null);
- }
- @Override
- public View makeView() {
- ViewHomePageSwitchTextBinding viewHomePageSwitchTextBinding = ViewHomePageSwitchTextBinding.inflate(inflater);
- return viewHomePageSwitchTextBinding.getRoot();
- }
- @Override
- public void onClick(View v) {
- }
- public void update(List<Pair<CharSequence, CharSequence>> list) {
- if (list == null || list.size() == 0) {
- return;
- }
- stop();
- texts = list;
- marker = 0;
- Pair<CharSequence, CharSequence> firstTxt = texts.get(0);
- setText(firstTxt.first, firstTxt.second);
- start();
- }
- public void start() {
- stop();
- handler.postDelayed(task, delayTime);
- }
- public void stop() {
- handler.removeCallbacks(task);
- }
- public int getMarker() {
- return marker;
- }
- public InformationSwitchBanner setTexts(List<Pair<CharSequence, CharSequence>> texts) {
- this.texts = texts;
- return this;
- }
- public void setDelayTime(int delayTime) {
- this.delayTime = delayTime;
- }
- private void createAnimation() {
- AlphaAnimation alphaAnimation;
- TranslateAnimation translateAnimation;
- int h = viewSwitcher.getHeight();
- if (h <= 0) {
- viewSwitcher.measure(0, 0);
- h = viewSwitcher.getMeasuredHeight();
- }
- InAnimationSet = new AnimationSet(true);
- OutAnimationSet = new AnimationSet(true);
- alphaAnimation = new AlphaAnimation(0, 1);
- translateAnimation = new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.ABSOLUTE, 0,
- Animation.ABSOLUTE, h, Animation.ABSOLUTE, 0);
- InAnimationSet.addAnimation(alphaAnimation);
- InAnimationSet.addAnimation(translateAnimation);
- InAnimationSet.setDuration(DURATION);
- alphaAnimation = new AlphaAnimation(1, 0);
- translateAnimation = new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.ABSOLUTE, 0,
- Animation.ABSOLUTE, 0, Animation.ABSOLUTE, -h);
- OutAnimationSet.addAnimation(alphaAnimation);
- OutAnimationSet.addAnimation(translateAnimation);
- OutAnimationSet.setDuration(DURATION);
- }
- private void nextView() {
- if (onSwitchListener != null) {
- onSwitchListener.preSwitch();
- }
- marker = ++marker % texts.size();
- Pair<CharSequence, CharSequence> nextTxt = texts.get(marker);
- setText(nextTxt.first, nextTxt.second);
- if (onSwitchListener != null) {
- onSwitchListener.onSwitch();
- }
- }
- public void setOnSwitchListener(OnSwitchListener listener) {
- this.onSwitchListener = listener;
- }
- public interface OnSwitchListener {
- void preSwitch();
- void onSwitch();
- }
- private final Runnable task = new Runnable() {
- @Override
- public void run() {
- nextView();
- handler.postDelayed(task, delayTime * 2L);
- }
- };
- }
|