package io.mapwize.mapwizeui; import android.animation.ArgbEvaluator; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.content.Context; import android.content.res.ColorStateList; import android.graphics.Color; import android.graphics.drawable.GradientDrawable; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; import io.mapwize.mapwizesdk.api.Floor; public class FloorView extends FrameLayout { private Floor floor; private TextView textView; private View animationView; private ObjectAnimator scale; private ColorStateList oldTvColors; private ObjectAnimator colorAnim; public FloorView(@NonNull Context context, @NonNull Floor floor) { super(context); this.floor = floor; this.initialize(context); } private void initialize(@NonNull Context context) { animationView = new View(context); animationView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); GradientDrawable drawable = new GradientDrawable(); drawable.setShape(GradientDrawable.OVAL); drawable.setColor(ContextCompat.getColor(context, io.mapwize.mapwizesdk.R.color.mapwize_main_color)); animationView.setBackground(drawable); animationView.setVisibility(INVISIBLE); this.addView(animationView); textView = new TextView(context); oldTvColors = textView.getTextColors(); textView.setText(floor.getName()); textView.setGravity(Gravity.CENTER); textView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); this.addView(textView); } public Floor getFloor() { return floor; } public void setSelected(boolean selected) { if (colorAnim != null) { colorAnim.end(); } if (selected) { animationView.setVisibility(VISIBLE); textView.setTextColor(Color.WHITE); } else { animationView.setVisibility(INVISIBLE); textView.setTextColor(oldTvColors); } scale = null; colorAnim = null; } public void setLoading() { scale = ObjectAnimator.ofPropertyValuesHolder(animationView, PropertyValuesHolder.ofFloat("scaleX", 0f, 1f), PropertyValuesHolder.ofFloat("scaleY", 0f, 1f)); scale.setDuration(500); scale.start(); colorAnim = ObjectAnimator.ofInt(textView, "textColor", oldTvColors.getDefaultColor(), Color.WHITE); colorAnim.setEvaluator(new ArgbEvaluator()); colorAnim.setDuration(500); colorAnim.start(); animationView.setVisibility(VISIBLE); } }