.2 秒延迟单击物理设备上的按钮,但不是模拟器



EDIT 2:这发生在运行API 23的物理三星Galaxy S7 Edge上,而不是运行API 23的模拟器Nexus 5X上。我有另一个运行Android 5的物理设备,它可以动画但不是很流畅。Nexus 5X API 22 与运行 API 23 的物理设备存在相同的问题。知道为什么吗?

不完全确定发生了什么,但是当我点击我的Button时,在我看到它的日志记录或动画开始之前,我得到了 .2 秒的延迟。如果我按住单击,我会在按钮背景滞后和动画时直观地看到延迟。

当我没有将样式设置为无边框或没有将背景设置为?android:attr/selectableItemBackground时,我没有问题。知道是什么导致了这个问题吗?

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:custom="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="112dp"
android:maxLines="3"
android:text="Hello World"
android:textColor="@android:color/white"
android:textSize="30sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<Button
android:id="@+id/btnYes"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_below="@+id/tv1"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:text="Yes"
android:textAlignment="center"
android:textAllCaps="true"
android:textColor="@android:color/white"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/tvAreYouAStudent"
/>
<Button
android:id="@+id/btnNo"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_below="@+id/tv1"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:text="No"
android:textAlignment="center"
android:textAllCaps="true"
android:textColor="@android:color/white"
app:layout_constraintLeft_toLeftOf="@+id/guideline"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv1"/>
<android.support.constraint.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5026042"
tools:layout_editor_absoluteX="193dp"
tools:layout_editor_absoluteY="0dp"/>
</android.support.constraint.ConstraintLayout>

片段

public class StudentFragment extends Fragment
{
public final String TAG = "StudentFragment";
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
{
ViewGroup rootView = (ViewGroup) inflater.inflate(
R.layout.fragment, container, false);
ButterKnife.bind(this, rootView);
Application.component().inject(this);
return rootView;
}
@OnClick(R.id.tvYes)
public void yesTapped()
{
tvYes.animate().scaleX(.85f).scaleY(.85f).setDuration(175);
tvNo.setScaleX(1);
tvNo.setScaleY(1);
Log.e(TAG, "Yes tapped");
}
@OnClick(R.id.tvNo)
public void noTapped()
{
tvNo.animate().scaleX(.85f).scaleY(.85f).setDuration(175);
tvYes.setScaleX(1);
tvYes.setScaleY(1);
Log.e(TAG, "No tapped");
}
}

原木:

如您所见,有时会有 200 毫秒的延迟,尤其是在最后 2 次点击中,有时没有。

12-20 22:57:52.266 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 0
12-20 22:57:52.366 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 1
12-20 22:57:52.576 20549-20549/com E/StudentFragment: Yes tapped
12-20 22:57:53.296 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 0
12-20 22:57:53.446 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 1
12-20 22:57:53.606 20549-20549/com E/StudentFragment: Yes tapped
12-20 22:57:54.656 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 0
12-20 22:57:54.716 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 1
12-20 22:57:54.856 20549-20549/com E/StudentFragment: Yes tapped
12-20 22:57:55.706 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 0
12-20 22:57:55.766 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 1
12-20 22:57:55.796 20549-20549/com E/StudentFragment: Yes tapped
12-20 22:57:57.116 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 0
12-20 22:57:57.166 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 1
12-20 22:58:00.496 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 0
12-20 22:58:00.616 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 1
12-20 22:58:00.826 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 0
12-20 22:58:00.826 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 1
12-20 22:58:00.826 20549-20549/com E/StudentFragment: Yes tapped
12-20 22:58:01.656 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 0
12-20 22:58:01.746 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 1
12-20 22:58:01.766 20549-20549/com E/StudentFragment: Yes tapped
12-20 22:58:02.756 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 0
12-20 22:58:02.836 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 1
12-20 22:58:03.166 20549-20549/com E/StudentFragment: Yes tapped
12-20 22:58:04.296 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 0
12-20 22:58:04.396 20549-20549/com D/ViewRootImpl: ViewPostImeInputStage processPointer 1
12-20 22:58:04.606 20549-20549/com E/StudentFragment: Yes tapped

如果我无法设置这些,我可以使用什么替代方法来模拟按钮单击?涟漪是理想的,因为它是安卓默认的。

编辑:我尝试使用:btnYes.animate().scaleX(.85f).scaleY(.85f).setDuration(175);在按钮上设置动画,但我看不到动画。我看到延迟,然后它发生了变化。

我还尝试通过上述更改将按钮更改为TextViews,但我仍然没有看到动画,只是滞后。

我使用的背景被放置在res/drawable中。一旦我将其分离到各自的可绘制文件夹中,所有的滞后都停止了。

我添加了一个ViewPager,看看这是否会滞后于动画,它确实如此,然后向我指出了这个答案。

相关内容

最新更新