setTranslation 不适用于 onCreate()
setTranslation is not working on onCreate()
setTranslationY()
不会在 onCreate()
中的布局上执行翻译,而在 setonTouchListener
或 setOnClickListener
.
中使用时没有问题
我也试过了animate().translationY()
。但是出现了同样的问题。
我试图展示我的代码中需要使问题更清楚的部分。 activity 中包含布局。此布局包含另一个布局,其高度用于平移测量。
Java 代码:
View mainMenuIncluded, mainMenu ;
mainMenuIncluded = findViewById(R.id.main_menu_included);
mainMenu = mainMenuIncluded.findViewById(R.id.main_menu);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pick_singer_list);
mainMenuIncluded.setTranslationY(mainMenuIncluded.getY()-mainMenu.getHeight());
}
activity 的相关 xml 部分:
<?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:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activity">
<include
layout="@layout/layout_pick_main_menu"
android:id="@+id/main_menu_included"/>
</android.support.constraint.ConstraintLayout>
包含布局的xml(包含mainMenu
):
<?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:tools="http://schemas.android.com/tools"
android:id="@+id/main_menu_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp">
<android.support.constraint.ConstraintLayout
android:id="@+id/main_menu_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="0dp"
android:layout_marginBottom="0dp"
android:background="@drawable/menu_gradient_background"
app:layout_constraintBottom_toTopOf="@id/main_menu_button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<android.support.constraint.ConstraintLayout
android:id="@+id/main_menu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="0dp"
android:layout_marginBottom="0dp"
android:background="@drawable/menu_gradient_background"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
>
</android.support.constraint.ConstraintLayout>
</android.support.constraint.ConstraintLayout>
</android.support.constraint.ConstraintLayout>
只有当视图已经绘制和测量时,您才能设置动画和移动视图。
使用:
Kotlin 版本:
yourView.post {
yourView.animate().translationY(/*value*/)
}
Java版本:
yourView.post(new Runnable() {
@Override
public void run() {
yourView.animate().translationY(/*value*/);
}
};
为此
只需替换这部分:
mainMenuIncluded.setTranslationY(mainMenuIncluded.getY()-mainMenu.getHeight());
与:
mainMenuIncluded.post(new Runnable() {
@Override
public void run() {
mainMenuIncluded.setTranslationY(mainMenuIncluded.getY() - mainMenu.getHeight());
}
};
setTranslationY()
不会在 onCreate()
中的布局上执行翻译,而在 setonTouchListener
或 setOnClickListener
.
我也试过了animate().translationY()
。但是出现了同样的问题。
我试图展示我的代码中需要使问题更清楚的部分。 activity 中包含布局。此布局包含另一个布局,其高度用于平移测量。
Java 代码:
View mainMenuIncluded, mainMenu ;
mainMenuIncluded = findViewById(R.id.main_menu_included);
mainMenu = mainMenuIncluded.findViewById(R.id.main_menu);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pick_singer_list);
mainMenuIncluded.setTranslationY(mainMenuIncluded.getY()-mainMenu.getHeight());
}
activity 的相关 xml 部分:
<?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:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activity">
<include
layout="@layout/layout_pick_main_menu"
android:id="@+id/main_menu_included"/>
</android.support.constraint.ConstraintLayout>
包含布局的xml(包含mainMenu
):
<?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:tools="http://schemas.android.com/tools"
android:id="@+id/main_menu_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp">
<android.support.constraint.ConstraintLayout
android:id="@+id/main_menu_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="0dp"
android:layout_marginBottom="0dp"
android:background="@drawable/menu_gradient_background"
app:layout_constraintBottom_toTopOf="@id/main_menu_button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<android.support.constraint.ConstraintLayout
android:id="@+id/main_menu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="0dp"
android:layout_marginBottom="0dp"
android:background="@drawable/menu_gradient_background"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
>
</android.support.constraint.ConstraintLayout>
</android.support.constraint.ConstraintLayout>
</android.support.constraint.ConstraintLayout>
只有当视图已经绘制和测量时,您才能设置动画和移动视图。 使用:
Kotlin 版本:
yourView.post {
yourView.animate().translationY(/*value*/)
}
Java版本:
yourView.post(new Runnable() {
@Override
public void run() {
yourView.animate().translationY(/*value*/);
}
};
为此
只需替换这部分:
mainMenuIncluded.setTranslationY(mainMenuIncluded.getY()-mainMenu.getHeight());
与:
mainMenuIncluded.post(new Runnable() {
@Override
public void run() {
mainMenuIncluded.setTranslationY(mainMenuIncluded.getY() - mainMenu.getHeight());
}
};