如何从外部将对话框动画化到屏幕中
How to animate dialog into screen from outside
我似乎无法将屏幕下方的对话框动画化到屏幕的 75%。我能够使用旧的翻译动画器来完成它,但它不允许在视图上发生 onclick 事件,所以我实现了 ObjectAnimator。
问题是,无论我做什么,对话框都会从屏幕中心开始动画,然后不知何故会在某个点消失。
LayoutInflater inflater = getLayoutInflater();
View dialoglayout = inflater.inflate(R.layout.toast_goal_added, null);
dialog = new Dialog(Activity.this, android.R.style.Theme_Translucent_NoTitleBar);
dialog.setContentView(dialoglayout);
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
dialog.getWindow().setLayout(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
ObjectAnimator animator = ObjectAnimator.ofFloat(dialoglayout, "y", -200f);
animator.setDuration(1000);
animator.start();
dialog.show();
这会将对话框向上移动,但如您所见,它隐藏在某些东西下面。
布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rl_customtoast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:clickable="true"
android:padding="10dp"
android:background="@drawable/custom_toast_bg" >
<ImageView
android:id="@+id/iv_toast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:src="@drawable/icon_add_on" />
<LinearLayout
android:id="@+id/ll_row"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/iv_toast"
android:layout_marginLeft="5dp"
android:padding="2dp" >
<TextView
android:id="@+id/toast_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Goal added"
android:textColor="#FDFDFD"
android:textSize="16sp"/>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<TextView
android:id="@+id/toast_text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click to see your result"
android:textColor="#E7E7E7"
android:textSize="15sp"/>
</LinearLayout>
</RelativeLayout>
所以问题
对话框开始从屏幕中心移动
对话框在某一点消失
我通过放弃对话框并使用普通布局使其工作。
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
float displayHeight = size.y;
AnimatorSet animSet = new AnimatorSet();
ObjectAnimator mover = ObjectAnimator.ofFloat(include_toast, "y", displayHeight, 15*displayHeight/20);
mover.setDuration(200);
ObjectAnimator mover2 = ObjectAnimator.ofFloat(include_toast, "y", 15*displayHeight/20, displayHeight);
mover2.setDuration(200);
mover2.setStartDelay(2000);
animSet.play(mover2).after(mover);
animSet.start();
其中 include_toast 是在主布局加载时不可见且仅在动画期间可见的布局。
我似乎无法将屏幕下方的对话框动画化到屏幕的 75%。我能够使用旧的翻译动画器来完成它,但它不允许在视图上发生 onclick 事件,所以我实现了 ObjectAnimator。
问题是,无论我做什么,对话框都会从屏幕中心开始动画,然后不知何故会在某个点消失。
LayoutInflater inflater = getLayoutInflater();
View dialoglayout = inflater.inflate(R.layout.toast_goal_added, null);
dialog = new Dialog(Activity.this, android.R.style.Theme_Translucent_NoTitleBar);
dialog.setContentView(dialoglayout);
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
dialog.getWindow().setLayout(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
ObjectAnimator animator = ObjectAnimator.ofFloat(dialoglayout, "y", -200f);
animator.setDuration(1000);
animator.start();
dialog.show();
这会将对话框向上移动,但如您所见,它隐藏在某些东西下面。
布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rl_customtoast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:clickable="true"
android:padding="10dp"
android:background="@drawable/custom_toast_bg" >
<ImageView
android:id="@+id/iv_toast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:src="@drawable/icon_add_on" />
<LinearLayout
android:id="@+id/ll_row"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/iv_toast"
android:layout_marginLeft="5dp"
android:padding="2dp" >
<TextView
android:id="@+id/toast_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Goal added"
android:textColor="#FDFDFD"
android:textSize="16sp"/>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<TextView
android:id="@+id/toast_text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click to see your result"
android:textColor="#E7E7E7"
android:textSize="15sp"/>
</LinearLayout>
</RelativeLayout>
所以问题
对话框开始从屏幕中心移动
对话框在某一点消失
我通过放弃对话框并使用普通布局使其工作。
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
float displayHeight = size.y;
AnimatorSet animSet = new AnimatorSet();
ObjectAnimator mover = ObjectAnimator.ofFloat(include_toast, "y", displayHeight, 15*displayHeight/20);
mover.setDuration(200);
ObjectAnimator mover2 = ObjectAnimator.ofFloat(include_toast, "y", 15*displayHeight/20, displayHeight);
mover2.setDuration(200);
mover2.setStartDelay(2000);
animSet.play(mover2).after(mover);
animSet.start();
其中 include_toast 是在主布局加载时不可见且仅在动画期间可见的布局。