android - 延迟确认按钮动画

标签 android button wear-os

我在框架布局中有一个 DelayedConfirmationView:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.wearable.view.DelayedConfirmationView
    android:id="@+id/delayed_confirmation"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:src="@drawable/save_button"
    app:circle_color="@color/blue"
    app:circle_radius="45dp"
    app:circle_radius_pressed="40dp"
    app:circle_padding="5dp"
    app:circle_border_width="10dp"
    app:circle_border_color="@color/white"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="Save"
    android:id="@+id/textView"
    android:layout_gravity="center"
    android:textColor="#ffffff"
    android:layout_marginTop="50dp" />
</FrameLayout>

此布局旨在由 fragment 显示:

public class SaveRunFragment extends Fragment implements DelayedConfirmationView.DelayedConfirmationListener {
Run1Fragment run1;
private DelayedConfirmationView mDelayedView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    final View view = inflater.inflate(R.layout.layout_saverun, container, false);

    mDelayedView =
            (DelayedConfirmationView) view.findViewById(R.id.delayed_confirmation);
    mDelayedView.setTotalTimeMs(4 * 1000);
    mDelayedView.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            System.out.println("START");
            mDelayedView.start();
            mDelayedView.setListener(SaveRunFragment.this);
            return;
        }
    });

    return view;
}

@Override
public void onDetach() {
    super.onDetach();
}

@Override
public void onTimerFinished(View view) {
    System.out.println("END");
}

@Override
public void onTimerSelected(View view) {
    System.out.println("cancel");
}
}

我想在按钮上实现一个动画,就像 delayedconfirmation 开发人员指南中的那样:https://developer.android.com/training/wearables/ui/confirm.html 但是当我单击按钮时, onclick() 不会触发该操作。

我已经测试过它制作了一个不同的按钮来触发该操作,但所发生的只是显示了打印件但未显示按钮周围的小边距...

谁能告诉我我做错了什么?

编辑

所以我将 fragment 更改为:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    final View view = inflater.inflate(R.layout.layout_saverun, container, false);

    System.out.println("before");
    mDelayedView =
            (DelayedConfirmationView) view.findViewById(R.id.delayed_confirmation);
    mDelayedView.setTotalTimeMs(4000);
    mDelayedView.setListener(this);
    System.out.println("after");

    return view;
}

@Override
public void onDetach() {
    super.onDetach();
}

@Override
public void onTimerFinished(View view) {
    //delayed confirmation
    System.out.println("END");
}

@Override
public void onTimerSelected(View v) {
    System.out.println("SELECTED");
    if (animation == false) {
        mDelayedView.start();
        mDelayedView.setListener(this);
        animation = true;
        System.out.println("Start");
    } else {
        ((DelayedConfirmationView) v).setListener(null);
        animation = false;
        System.out.println("Cancel");
    }
}

打印品按预期显示,但圆形按钮周围没有动画...

编辑

问题是我的源图像太大了,它覆盖了动画,这就是它没有显示的原因。

最佳答案

您已经在 DelayedConfirmationView 本身上设置了一个 OnClickListener;你不应该这样做,因为它不会收到触摸事件。通常通过提供另一个组件(比如按钮)来开始倒计时,以便用户可以单击它开始。每当用户点击 DelayedConfirmationView 时,无论计数器是否启动,都会调用“onTimerSelected()”回调(在该组件的源代码中,onTouchEvent() 用于接收触摸事件并将它们委托(delegate)给 onTimerStart() ) 所以你的 onCreateView() 应该变成这样:

    ...
    mDelayedView = (DelayedConfirmationView) 
                   findViewById(R.id.delayed_confirmation);
    mDelayedView.setListener(this);
    mDelayedView.setTotalTimeMs(4000);
    ...

您可以通过在 onTimerSelected() 中调用 mDelayedView.start() 点击同一个 DelayedConfirmationView 来开始倒计时,但是您必须自己管理状态根据之前的状态将该点击事件解释为开始或取消。

关于android - 延迟确认按钮动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33130458/

相关文章:

python - 使用自定义小部件 kivy

javascript - Sencha Tap 监听器未触发

android - 是否可以通过 android 从智能 watch 获取 PPG(光体积描记图)数据?

android - Google Play 服务和 NoClassDefFoundError

android - “未找到 Android 属性。”构建 Flutter aar 时出错

android - 如何在 nativescript 插件中获取 Activity?

javascript - 动态启用按钮

android - 前台服务android wear

android - Android 短信状态的 70 值代表什么?

java - 电子邮件链接似乎只是来自 Nexus 7(操作系统版本 : 4. 2.2)的文本