Search in sources :

Example 6 with StateListAnimator

use of android.animation.StateListAnimator in project GestureViews by alexvasilkov.

the class DemoActivity method setAppBarStateListAnimator.

@SuppressLint("Recycle")
private static void setAppBarStateListAnimator(@NonNull View view) {
    // App bar elevation animation does not work unless we set state animator ourselves
    final StateListAnimator sla = new StateListAnimator();
    final int[] notLifted = new int[] { -R.attr.state_lifted };
    final int[] lifted = new int[0];
    final long dur = 150L;
    final float elevation = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8f, view.getResources().getDisplayMetrics());
    sla.addState(notLifted, ObjectAnimator.ofFloat(view, "elevation", 0f).setDuration(dur));
    sla.addState(lifted, ObjectAnimator.ofFloat(view, "elevation", elevation).setDuration(dur));
    view.setStateListAnimator(sla);
}
Also used : StateListAnimator(android.animation.StateListAnimator) SuppressLint(android.annotation.SuppressLint)

Example 7 with StateListAnimator

use of android.animation.StateListAnimator in project iosched by google.

the class FloatingActionButtonLollipop method onElevationsChanged.

@Override
void onElevationsChanged(final float elevation, final float pressedTranslationZ) {
    if (Build.VERSION.SDK_INT == 21) {
        // logic in the animations below).
        if (mView.isEnabled()) {
            mView.setElevation(elevation);
            if (mView.isFocused() || mView.isPressed()) {
                mView.setTranslationZ(pressedTranslationZ);
            } else {
                mView.setTranslationZ(0);
            }
        } else {
            mView.setElevation(0);
            mView.setTranslationZ(0);
        }
    } else {
        final StateListAnimator stateListAnimator = new StateListAnimator();
        // Animate elevation and translationZ to our values when pressed
        AnimatorSet set = new AnimatorSet();
        set.play(ObjectAnimator.ofFloat(mView, "elevation", elevation).setDuration(0)).with(ObjectAnimator.ofFloat(mView, View.TRANSLATION_Z, pressedTranslationZ).setDuration(PRESSED_ANIM_DURATION));
        set.setInterpolator(ANIM_INTERPOLATOR);
        stateListAnimator.addState(PRESSED_ENABLED_STATE_SET, set);
        // Same deal for when we're focused
        set = new AnimatorSet();
        set.play(ObjectAnimator.ofFloat(mView, "elevation", elevation).setDuration(0)).with(ObjectAnimator.ofFloat(mView, View.TRANSLATION_Z, pressedTranslationZ).setDuration(PRESSED_ANIM_DURATION));
        set.setInterpolator(ANIM_INTERPOLATOR);
        stateListAnimator.addState(FOCUSED_ENABLED_STATE_SET, set);
        // Animate translationZ to 0 if not pressed
        set = new AnimatorSet();
        set.playSequentially(ObjectAnimator.ofFloat(mView, "elevation", elevation).setDuration(0), // bug). The issue has been fixed in version 25.
        ObjectAnimator.ofFloat(mView, View.TRANSLATION_Z, mView.getTranslationZ()).setDuration(PRESSED_ANIM_DELAY), ObjectAnimator.ofFloat(mView, View.TRANSLATION_Z, 0f).setDuration(PRESSED_ANIM_DURATION));
        set.setInterpolator(ANIM_INTERPOLATOR);
        stateListAnimator.addState(ENABLED_STATE_SET, set);
        // Animate everything to 0 when disabled
        set = new AnimatorSet();
        set.play(ObjectAnimator.ofFloat(mView, "elevation", 0f).setDuration(0)).with(ObjectAnimator.ofFloat(mView, View.TRANSLATION_Z, 0f).setDuration(0));
        set.setInterpolator(ANIM_INTERPOLATOR);
        stateListAnimator.addState(EMPTY_STATE_SET, set);
        mView.setStateListAnimator(stateListAnimator);
    }
    if (mShadowViewDelegate.isCompatPaddingEnabled()) {
        updatePadding();
    }
}
Also used : StateListAnimator(android.animation.StateListAnimator) AnimatorSet(android.animation.AnimatorSet)

Example 8 with StateListAnimator

use of android.animation.StateListAnimator in project iosched by google.

the class ViewUtilsLollipop method setStateListAnimatorFromAttrs.

static void setStateListAnimatorFromAttrs(View view, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    final Context context = view.getContext();
    final TypedArray a = context.obtainStyledAttributes(attrs, STATE_LIST_ANIM_ATTRS, defStyleAttr, defStyleRes);
    try {
        if (a.hasValue(0)) {
            StateListAnimator sla = AnimatorInflater.loadStateListAnimator(context, a.getResourceId(0, 0));
            view.setStateListAnimator(sla);
        }
    } finally {
        a.recycle();
    }
}
Also used : Context(android.content.Context) TypedArray(android.content.res.TypedArray) StateListAnimator(android.animation.StateListAnimator)

Example 9 with StateListAnimator

use of android.animation.StateListAnimator in project KL2 by jweihao.

the class ViewChangesAnimatorActivity method onViewClicked.

@OnClick({ R.id.button_view_changes, R.id.iamge })
public void onViewClicked(View view) {
    switch(view.getId()) {
        case R.id.button_view_changes:
            // 方式二,在代码中设置
            StateListAnimator stateListAnimator = AnimatorInflater.loadStateListAnimator(this, R.drawable.animated_selector_view_changes);
            mButtonViewChanges.setStateListAnimator(stateListAnimator);
            break;
        case R.id.iamge:
            if (mIsCheck) {
                mIamge.setImageState(STATE_UNCHECKED, true);
                mIsCheck = false;
            } else {
                mIamge.setImageState(STATE_CHECKED, true);
                mIsCheck = true;
            }
            break;
        default:
            break;
    }
}
Also used : StateListAnimator(android.animation.StateListAnimator) OnClick(butterknife.OnClick)

Example 10 with StateListAnimator

use of android.animation.StateListAnimator in project Telegram-FOSS by Telegram-FOSS-Team.

the class CallLogActivity method createView.

@Override
public View createView(Context context) {
    greenDrawable = getParentActivity().getResources().getDrawable(R.drawable.ic_call_made_green_18dp).mutate();
    greenDrawable.setBounds(0, 0, greenDrawable.getIntrinsicWidth(), greenDrawable.getIntrinsicHeight());
    greenDrawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_calls_callReceivedGreenIcon), PorterDuff.Mode.MULTIPLY));
    iconOut = new ImageSpan(greenDrawable, ImageSpan.ALIGN_BOTTOM);
    greenDrawable2 = getParentActivity().getResources().getDrawable(R.drawable.ic_call_received_green_18dp).mutate();
    greenDrawable2.setBounds(0, 0, greenDrawable2.getIntrinsicWidth(), greenDrawable2.getIntrinsicHeight());
    greenDrawable2.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_calls_callReceivedGreenIcon), PorterDuff.Mode.MULTIPLY));
    iconIn = new ImageSpan(greenDrawable2, ImageSpan.ALIGN_BOTTOM);
    redDrawable = getParentActivity().getResources().getDrawable(R.drawable.ic_call_received_green_18dp).mutate();
    redDrawable.setBounds(0, 0, redDrawable.getIntrinsicWidth(), redDrawable.getIntrinsicHeight());
    redDrawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_calls_callReceivedRedIcon), PorterDuff.Mode.MULTIPLY));
    iconMissed = new ImageSpan(redDrawable, ImageSpan.ALIGN_BOTTOM);
    actionBar.setBackButtonDrawable(new BackDrawable(false));
    actionBar.setAllowOverlayTitle(true);
    actionBar.setTitle(LocaleController.getString("Calls", R.string.Calls));
    actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() {

        @Override
        public void onItemClick(int id) {
            if (id == -1) {
                if (actionBar.isActionModeShowed()) {
                    hideActionMode(true);
                } else {
                    finishFragment();
                }
            } else if (id == delete_all_calls) {
                showDeleteAlert(true);
            } else if (id == delete) {
                showDeleteAlert(false);
            }
        }
    });
    ActionBarMenu menu = actionBar.createMenu();
    otherItem = menu.addItem(10, R.drawable.ic_ab_other);
    otherItem.setContentDescription(LocaleController.getString("AccDescrMoreOptions", R.string.AccDescrMoreOptions));
    otherItem.addSubItem(delete_all_calls, R.drawable.msg_delete, LocaleController.getString("DeleteAllCalls", R.string.DeleteAllCalls));
    fragmentView = new FrameLayout(context);
    fragmentView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundGray));
    FrameLayout frameLayout = (FrameLayout) fragmentView;
    flickerLoadingView = new FlickerLoadingView(context);
    flickerLoadingView.setViewType(FlickerLoadingView.CALL_LOG_TYPE);
    flickerLoadingView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
    flickerLoadingView.showDate(false);
    emptyView = new EmptyTextProgressView(context, flickerLoadingView);
    frameLayout.addView(emptyView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
    listView = new RecyclerListView(context);
    listView.setEmptyView(emptyView);
    listView.setLayoutManager(layoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
    listView.setAdapter(listViewAdapter = new ListAdapter(context));
    listView.setVerticalScrollbarPosition(LocaleController.isRTL ? RecyclerListView.SCROLLBAR_POSITION_LEFT : RecyclerListView.SCROLLBAR_POSITION_RIGHT);
    frameLayout.addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
    listView.setOnItemClickListener((view, position) -> {
        if (view instanceof CallCell) {
            CallLogRow row = calls.get(position - listViewAdapter.callsStartRow);
            if (actionBar.isActionModeShowed()) {
                addOrRemoveSelectedDialog(row.calls, (CallCell) view);
            } else {
                Bundle args = new Bundle();
                args.putLong("user_id", row.user.id);
                args.putInt("message_id", row.calls.get(0).id);
                getNotificationCenter().postNotificationName(NotificationCenter.closeChats);
                presentFragment(new ChatActivity(args), true);
            }
        } else if (view instanceof GroupCallCell) {
            GroupCallCell cell = (GroupCallCell) view;
            Bundle args = new Bundle();
            args.putLong("chat_id", cell.currentChat.id);
            getNotificationCenter().postNotificationName(NotificationCenter.closeChats);
            presentFragment(new ChatActivity(args), true);
        }
    });
    listView.setOnItemLongClickListener((view, position) -> {
        if (view instanceof CallCell) {
            addOrRemoveSelectedDialog(calls.get(position - listViewAdapter.callsStartRow).calls, (CallCell) view);
            return true;
        }
        return false;
    });
    listView.setOnScrollListener(new RecyclerView.OnScrollListener() {

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            int firstVisibleItem = layoutManager.findFirstVisibleItemPosition();
            int visibleItemCount = firstVisibleItem == RecyclerView.NO_POSITION ? 0 : Math.abs(layoutManager.findLastVisibleItemPosition() - firstVisibleItem) + 1;
            if (visibleItemCount > 0) {
                int totalItemCount = listViewAdapter.getItemCount();
                if (!endReached && !loading && !calls.isEmpty() && firstVisibleItem + visibleItemCount >= totalItemCount - 5) {
                    final CallLogRow row = calls.get(calls.size() - 1);
                    AndroidUtilities.runOnUIThread(() -> getCalls(row.calls.get(row.calls.size() - 1).id, 100));
                }
            }
            if (floatingButton.getVisibility() != View.GONE) {
                final View topChild = recyclerView.getChildAt(0);
                int firstViewTop = 0;
                if (topChild != null) {
                    firstViewTop = topChild.getTop();
                }
                boolean goingDown;
                boolean changed = true;
                if (prevPosition == firstVisibleItem) {
                    final int topDelta = prevTop - firstViewTop;
                    goingDown = firstViewTop < prevTop;
                    changed = Math.abs(topDelta) > 1;
                } else {
                    goingDown = firstVisibleItem > prevPosition;
                }
                if (changed && scrollUpdated) {
                    hideFloatingButton(goingDown);
                }
                prevPosition = firstVisibleItem;
                prevTop = firstViewTop;
                scrollUpdated = true;
            }
        }
    });
    if (loading) {
        emptyView.showProgress();
    } else {
        emptyView.showTextView();
    }
    floatingButton = new ImageView(context);
    floatingButton.setVisibility(View.VISIBLE);
    floatingButton.setScaleType(ImageView.ScaleType.CENTER);
    Drawable drawable = Theme.createSimpleSelectorCircleDrawable(AndroidUtilities.dp(56), Theme.getColor(Theme.key_chats_actionBackground), Theme.getColor(Theme.key_chats_actionPressedBackground));
    if (Build.VERSION.SDK_INT < 21) {
        Drawable shadowDrawable = context.getResources().getDrawable(R.drawable.floating_shadow).mutate();
        shadowDrawable.setColorFilter(new PorterDuffColorFilter(0xff000000, PorterDuff.Mode.MULTIPLY));
        CombinedDrawable combinedDrawable = new CombinedDrawable(shadowDrawable, drawable, 0, 0);
        combinedDrawable.setIconSize(AndroidUtilities.dp(56), AndroidUtilities.dp(56));
        drawable = combinedDrawable;
    }
    floatingButton.setBackgroundDrawable(drawable);
    floatingButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_chats_actionIcon), PorterDuff.Mode.MULTIPLY));
    floatingButton.setImageResource(R.drawable.ic_call);
    floatingButton.setContentDescription(LocaleController.getString("Call", R.string.Call));
    if (Build.VERSION.SDK_INT >= 21) {
        StateListAnimator animator = new StateListAnimator();
        animator.addState(new int[] { android.R.attr.state_pressed }, ObjectAnimator.ofFloat(floatingButton, "translationZ", AndroidUtilities.dp(2), AndroidUtilities.dp(4)).setDuration(200));
        animator.addState(new int[] {}, ObjectAnimator.ofFloat(floatingButton, "translationZ", AndroidUtilities.dp(4), AndroidUtilities.dp(2)).setDuration(200));
        floatingButton.setStateListAnimator(animator);
        floatingButton.setOutlineProvider(new ViewOutlineProvider() {

            @SuppressLint("NewApi")
            @Override
            public void getOutline(View view, Outline outline) {
                outline.setOval(0, 0, AndroidUtilities.dp(56), AndroidUtilities.dp(56));
            }
        });
    }
    frameLayout.addView(floatingButton, LayoutHelper.createFrame(Build.VERSION.SDK_INT >= 21 ? 56 : 60, Build.VERSION.SDK_INT >= 21 ? 56 : 60, (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT) | Gravity.BOTTOM, LocaleController.isRTL ? 14 : 0, 0, LocaleController.isRTL ? 0 : 14, 14));
    floatingButton.setOnClickListener(v -> {
        Bundle args = new Bundle();
        args.putBoolean("destroyAfterSelect", true);
        args.putBoolean("returnAsResult", true);
        args.putBoolean("onlyUsers", true);
        args.putBoolean("allowSelf", false);
        ContactsActivity contactsFragment = new ContactsActivity(args);
        contactsFragment.setDelegate((user, param, activity) -> {
            TLRPC.UserFull userFull = getMessagesController().getUserFull(user.id);
            VoIPHelper.startCall(lastCallUser = user, false, userFull != null && userFull.video_calls_available, getParentActivity(), null, getAccountInstance());
        });
        presentFragment(contactsFragment);
    });
    return fragmentView;
}
Also used : StateListAnimator(android.animation.StateListAnimator) BackDrawable(org.telegram.ui.ActionBar.BackDrawable) PorterDuffColorFilter(android.graphics.PorterDuffColorFilter) RecyclerListView(org.telegram.ui.Components.RecyclerListView) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) TLRPC(org.telegram.tgnet.TLRPC) ImageView(android.widget.ImageView) RLottieImageView(org.telegram.ui.Components.RLottieImageView) FlickerLoadingView(org.telegram.ui.Components.FlickerLoadingView) ActionBar(org.telegram.ui.ActionBar.ActionBar) Bundle(android.os.Bundle) Drawable(android.graphics.drawable.Drawable) CombinedDrawable(org.telegram.ui.Components.CombinedDrawable) BackDrawable(org.telegram.ui.ActionBar.BackDrawable) Outline(android.graphics.Outline) ActionBarMenu(org.telegram.ui.ActionBar.ActionBarMenu) ImageView(android.widget.ImageView) View(android.view.View) RecyclerView(androidx.recyclerview.widget.RecyclerView) RLottieImageView(org.telegram.ui.Components.RLottieImageView) TextView(android.widget.TextView) FlickerLoadingView(org.telegram.ui.Components.FlickerLoadingView) NumberTextView(org.telegram.ui.Components.NumberTextView) RecyclerListView(org.telegram.ui.Components.RecyclerListView) ViewOutlineProvider(android.view.ViewOutlineProvider) Paint(android.graphics.Paint) SuppressLint(android.annotation.SuppressLint) FrameLayout(android.widget.FrameLayout) CombinedDrawable(org.telegram.ui.Components.CombinedDrawable) SuppressLint(android.annotation.SuppressLint) RecyclerView(androidx.recyclerview.widget.RecyclerView) ImageSpan(android.text.style.ImageSpan)

Aggregations

StateListAnimator (android.animation.StateListAnimator)25 SuppressLint (android.annotation.SuppressLint)11 Drawable (android.graphics.drawable.Drawable)10 View (android.view.View)10 ImageView (android.widget.ImageView)10 Outline (android.graphics.Outline)9 PorterDuffColorFilter (android.graphics.PorterDuffColorFilter)9 ViewOutlineProvider (android.view.ViewOutlineProvider)9 ActionBar (org.telegram.ui.ActionBar.ActionBar)9 CombinedDrawable (org.telegram.ui.Components.CombinedDrawable)9 AnimatorSet (android.animation.AnimatorSet)8 Context (android.content.Context)8 LinearLayoutManager (androidx.recyclerview.widget.LinearLayoutManager)8 RecyclerView (androidx.recyclerview.widget.RecyclerView)8 RecyclerListView (org.telegram.ui.Components.RecyclerListView)8 Paint (android.graphics.Paint)7 ViewGroup (android.view.ViewGroup)7 FrameLayout (android.widget.FrameLayout)7 Animator (android.animation.Animator)6 ObjectAnimator (android.animation.ObjectAnimator)6