Dom*_*uza 36 android buttonclick android-animation dialogfragment
我有一个DialogFragment,我在onActivityCreated方法中为进入/退出设置动画,如下所示
@Override
public void onActivityCreated(Bundle arg0) {
super.onActivityCreated(arg0);
getDialog().getWindow()
.getAttributes().windowAnimations = R.style.DialogAnimation;
}
Run Code Online (Sandbox Code Playgroud)
我的DialogAnimation样式文件如下
<style name="DialogAnimation">
<item name="android:windowEnterAnimation">@android:anim/fade_in</item>
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
Run Code Online (Sandbox Code Playgroud)
这对我有用......
现在我的问题是我希望有两个不同的退出动画,一个用于点击确定按钮,一个用于取消按钮.所以我做的是我尝试在解雇之前更改转换,但它没有工作..任何解决方案如何实现......这就是我的尝试.
@Override
public void onClick(View v) {
getDialog().getWindow()
.getAttributes().windowAnimations = R.style.DialogAnimation2;
this.dismiss();
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*okh 48
您可以在DialogFragment中执行此操作,而无需更改
getDialog().getWindow()
.getAttributes().windowAnimations
Run Code Online (Sandbox Code Playgroud)
您应该在onStart和onClick上设置"装饰视图"的动画.
这是代码剪切:
首先创建对话框
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setTitle("Hello from animated dialog :)")
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//we have to add button here and then override it's click in onStart
}
}
)
.setCancelable(false)
.create();
}
Run Code Online (Sandbox Code Playgroud)
然后重写onStart方法
@Override
public void onStart() {
super.onStart();
AlertDialog dialog = (AlertDialog)getDialog();
final View decorView = getDialog()
.getWindow()
.getDecorView();
ObjectAnimator scaleDown = ObjectAnimator.ofPropertyValuesHolder(decorView,
PropertyValuesHolder.ofFloat("scaleX", 0.0f, 1.0f),
PropertyValuesHolder.ofFloat("scaleY", 0.0f, 1.0f),
PropertyValuesHolder.ofFloat("alpha", 0.0f, 1.0f));
scaleDown.setDuration(2000);
scaleDown.start();
Button positiveButton = dialog.getButton(Dialog.BUTTON_NEGATIVE);
positiveButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
final View decorView = getDialog()
.getWindow()
.getDecorView();
ObjectAnimator scaleDown = ObjectAnimator.ofPropertyValuesHolder(decorView,
PropertyValuesHolder.ofFloat("scaleX", 1.0f, 0.0f),
PropertyValuesHolder.ofFloat("scaleY", 1.0f, 0.0f),
PropertyValuesHolder.ofFloat("alpha", 1.0f, 0.0f));
scaleDown.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationEnd(Animator animation) {
dismiss();
}
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
scaleDown.setDuration(2000);
scaleDown.start();
}
});
}
Run Code Online (Sandbox Code Playgroud)
这是结果动画
如果您从我的代码中删除缩放属性,您将只获得alpha动画.完全按照你的意愿.
删除这个:
PropertyValuesHolder.ofFloat("scaleX", 1.0f, 0.0f),
PropertyValuesHolder.ofFloat("scaleY", 1.0f, 0.0f),
Run Code Online (Sandbox Code Playgroud)
Akh*_*mar 22
您可以为对话框片段设置向上和向下动画.在'res/anim'中添加两个文件:
//向上滑动动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromYDelta="100%"
android:interpolator="@android:anim/accelerate_interpolator"
android:toYDelta="0" />
</set>
Run Code Online (Sandbox Code Playgroud)
//滑动dowm动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromYDelta="0%p"
android:interpolator="@android:anim/accelerate_interpolator"
android:toYDelta="100%p" />
</set>
Run Code Online (Sandbox Code Playgroud)
//风格
<style name="DialogAnimation">
<item name="android:windowEnterAnimation">@anim/slide_up</item>
<item name="android:windowExitAnimation">@anim/slide_down</item>
</style>
Run Code Online (Sandbox Code Playgroud)
//内部对话框片段
@Override
public void onActivityCreated(Bundle arg0) {
super.onActivityCreated(arg0);
getDialog().getWindow()
.getAttributes().windowAnimations = R.style.DialogAnimation;
}
Run Code Online (Sandbox Code Playgroud)
我认为最好的方法是在按钮单击时调用不同的动画。因此你会得到类似于下面的内容:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button OkButton = (Button) findViewById(R.id.btnOk);
Button CancelButton = (Button) findViewById(R.id.btnCancel);
OkButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
}
});
return true;
CancelButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogAnimation2;
}
});
return true;
}
Run Code Online (Sandbox Code Playgroud)
如果我是你,我也会使用正确的命名约定以供将来参考。例如,将 DialogAnimation 设置为 OkAnimation,将 DialogAnimation2 设置为 CancelAnimation。
回家这有帮助:)
| 归档时间: |
|
| 查看次数: |
23525 次 |
| 最近记录: |