Форум для тех, кто программирует под Android
Anonymous
Как я могу плавно сменить представление на Window.setattributes?
Сообщение
Anonymous » 22 сен 2025, 12:56
Я разрабатываю проект Android от Java. Во -первых, я меняю деятельность на половину экрана. Затем, когда пользователь нажимает кнопку, активность станет полноэкранным экраном по анимации. Когда начнется анимация, представление встряхивает вниз (а именно представление сначала перемещается, а затем перемещается вниз). Код отображается следующим образом. < /P>
Код: Выделить всё
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AutoRouter.inject(this);
Window window = getWindow();
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
WindowManager.LayoutParams para = window.getAttributes();
para.height = (int) halfScreenHeight;
para.width = (int) (dm.widthPixels);
para.gravity = Gravity.BOTTOM;
window.setAttributes(para);
window.setDimAmount(0.70f);
window.getDecorView().setOutlineProvider(new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), 30);
}
});
window.getDecorView().setClipToOutline(true);
overridePendingTransition(R.anim.slide_in_bottom_ai_dialog, R.anim.slide_out_bottom_ai_dialog);
}
//when user click,it will call this function
public void changeDialogHeight(int mode, double height) {
Window window = getWindow();
WindowManager.LayoutParams para = window.getAttributes();
int currentHeight = para.height;
int targetHeight = 0;
int screenHeight = Utils.getScreenHeight(BaseApplication.get());
switch (mode) {
case 0:
targetHeight = screenHeight;
break;
case 1:
targetHeight = screenHeight / 2;
break;
case 2:
if(height > Utils.getScreenHeight(mContext) || height < 50){
height = Utils.getScreenHeight(mContext) / 2;
}
targetHeight = (int)height;
break;
}
ValueAnimator valueAnimator = ValueAnimator.ofInt(currentHeight, targetHeight);
valueAnimator.setDuration(400);
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
runOnUiThread(new Runnable() {
@Override
public void run() {
int animatedValue = (int) animation.getAnimatedValue();
para.height = animatedValue;
window.setAttributes(para);
}
});
}
});
// 启动动画
valueAnimator.start();
}
Как я могу изменить свой код, чтобы сделать анимацию плавно?
Подробнее здесь:
https://stackoverflow.com/questions/797 ... s-smoothly
1758534969
Anonymous
Я разрабатываю проект Android от Java. Во -первых, я меняю деятельность на половину экрана. Затем, когда пользователь нажимает кнопку, активность станет полноэкранным экраном по анимации. Когда начнется анимация, представление встряхивает вниз (а именно представление сначала перемещается, а затем перемещается вниз). Код отображается следующим образом. < /P> [code]public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); AutoRouter.inject(this); Window window = getWindow(); WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(dm); WindowManager.LayoutParams para = window.getAttributes(); para.height = (int) halfScreenHeight; para.width = (int) (dm.widthPixels); para.gravity = Gravity.BOTTOM; window.setAttributes(para); window.setDimAmount(0.70f); window.getDecorView().setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), 30); } }); window.getDecorView().setClipToOutline(true); overridePendingTransition(R.anim.slide_in_bottom_ai_dialog, R.anim.slide_out_bottom_ai_dialog); } //when user click,it will call this function public void changeDialogHeight(int mode, double height) { Window window = getWindow(); WindowManager.LayoutParams para = window.getAttributes(); int currentHeight = para.height; int targetHeight = 0; int screenHeight = Utils.getScreenHeight(BaseApplication.get()); switch (mode) { case 0: targetHeight = screenHeight; break; case 1: targetHeight = screenHeight / 2; break; case 2: if(height > Utils.getScreenHeight(mContext) || height < 50){ height = Utils.getScreenHeight(mContext) / 2; } targetHeight = (int)height; break; } ValueAnimator valueAnimator = ValueAnimator.ofInt(currentHeight, targetHeight); valueAnimator.setDuration(400); valueAnimator.setInterpolator(new LinearInterpolator()); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { runOnUiThread(new Runnable() { @Override public void run() { int animatedValue = (int) animation.getAnimatedValue(); para.height = animatedValue; window.setAttributes(para); } }); } }); // 启动动画 valueAnimator.start(); } [/code] Как я могу изменить свой код, чтобы сделать анимацию плавно? Подробнее здесь: [url]https://stackoverflow.com/questions/79771200/how-can-i-change-view-by-window-setattributes-smoothly[/url]