延迟确认按钮动画
Delayed confirmation button animation
我在框架布局中有一个 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>
此布局旨在由片段显示:
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() 不会触发该操作。
我已经测试过它制作了一个不同的按钮来触发该操作,但所有发生的事情是显示了打印件但未显示按钮周围的小边距...
谁能告诉我我做错了什么?
编辑
所以我将片段更改为:
@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() 用于接收触摸事件并将它们委托给 onTimerStart() ) 所以你的 onCreateView() 应该变成这样:
...
mDelayedView = (DelayedConfirmationView)
findViewById(R.id.delayed_confirmation);
mDelayedView.setListener(this);
mDelayedView.setTotalTimeMs(4000);
...
您可以通过在 onTimerSelected()
中调用 mDelayedView.start()
单击同一个 DelayedConfirmationView 来开始倒计时,但是您必须自己管理状态,将点击事件解释为开始或取消取决于在之前的状态下。
我在框架布局中有一个 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>
此布局旨在由片段显示:
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() 不会触发该操作。
我已经测试过它制作了一个不同的按钮来触发该操作,但所有发生的事情是显示了打印件但未显示按钮周围的小边距...
谁能告诉我我做错了什么?
编辑
所以我将片段更改为:
@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() 用于接收触摸事件并将它们委托给 onTimerStart() ) 所以你的 onCreateView() 应该变成这样:
...
mDelayedView = (DelayedConfirmationView)
findViewById(R.id.delayed_confirmation);
mDelayedView.setListener(this);
mDelayedView.setTotalTimeMs(4000);
...
您可以通过在 onTimerSelected()
中调用 mDelayedView.start()
单击同一个 DelayedConfirmationView 来开始倒计时,但是您必须自己管理状态,将点击事件解释为开始或取消取决于在之前的状态下。