当前位置: 首页 > 面试题库 >

具有动画的WindowManager(可以吗?)

丰胤运
2023-03-14
问题内容

有什么方法可以使用Animation在Android的项目中使用WindowManager扩展视图吗?即使使用网站中的示例,我也做不到!我使用了许多示例,但没有一个有效!

public BannerLayout(Activity activity, final Context context) {
    super(context);

    this.context = context;

    final WindowManager.LayoutParams params = new WindowManager.LayoutParams( 
            WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
            WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | 
            WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
            PixelFormat.TRANSLUCENT);

    wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    this.popupLayout = (RelativeLayout) inflater.inflate(R.layout.popup_activity, null);
    this.popupLayout.setVisibility(GONE);
    this.setActive(false);

    wm.addView(this.popupLayout, params);

    context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}


private void show(){
    Animation in = AnimationUtils.loadAnimation(this.context, android.R.anim.fade_in);
    this.popupLayout.setAnimation(in);

    this.setActive(true);
    this.popupLayout.setVisibility(VISIBLE);
}

问题答案:

我不确定您的任务的确切要求,但是有两种方法可以向窗口提供动画:

  1. 用法WindowManager.LayoutParams.windowAnimations如下:

    params.windowAnimations = android.R.style.Animation_Translucent;
    
  2. 添加附加的“容器”视图,因为WindowManager它不是真实的ViewGroup,因此添加视图的普通动画无法使用。已经问过这个问题,但是缺少代码。我将通过以下方式应用它:

    public class BannerLayout extends View {
    
    private final Context mContext;
    
    private final ViewGroup mPopupLayout;
    
    private final ViewGroup mParentView;
    
    public BannerLayout(Activity activity, final Context context) {
        super(context);
    
        mContext = context;
    
        final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
                        WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                PixelFormat.TRANSLUCENT);
    
        final WindowManager mWinManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mPopupLayout = (RelativeLayout) inflater.inflate(R.layout.popup_activity, null);
        mPopupLayout.setVisibility(GONE);
    
        params.width = ActionBar.LayoutParams.WRAP_CONTENT;
        params.height = ActionBar.LayoutParams.WRAP_CONTENT;
    
        // Default variant
        // params.windowAnimations = android.R.style.Animation_Translucent;
    
        mParentView = new FrameLayout(mContext);
    
        mWinManager.addView(mParentView, params);
    
        mParentView.addView(mPopupLayout);
        mPopupLayout.setVisibility(GONE);
    }
    
    /**
     * Shows view
     */
    public void show(){
        final Animation in = AnimationUtils.loadAnimation(this.mContext, android.R.anim.fade_in);
    
        in.setDuration(2000);
    
        mPopupLayout.setVisibility(VISIBLE);
        mPopupLayout.startAnimation(in);
    }
    
    /**
     * Hides view
     */
    public void hide() {
        mPopupLayout.setVisibility(GONE);
    }
    

    }



 类似资料:
  • 我使用以下库创建了应用程序抽屉:http://developer.android.com/training/implementing-navigation/nav-drawer.html 我想在打开应用程序时用动画显示导航抽屉。我该怎么做?

  • 对于普通用户来说,是关注一个应用本身、还是更关注这个应用的元素从 A 点到 B 点转变的过程,这种选择往往有些难。谨慎编排的动画可以在有多步操作的过程中有效地引导用户的注意力;在版面变化或元素重组时避免造成困惑;提高用户体验的整体美感。动画设计不仅应当优美,更应当服务于功能。 示例 示例 示例 1: 示例 2: 视觉连贯性 在两个视觉效果不同的页面之间的转场应该平滑、轻快,更重要的是使用户感觉清晰

  • 我在jquery中做了一些转换,我被卡住了。我想在点击重叠的div与图像在这个div与红色背景。 HTML null CSS jQuery $(文档).就绪(函数(){$(“#img_div1”).单击(函数(){ $(“.img1”).动画({“height”:“70px”},1000).attr(“src”,“http://gglys.com/images/logo.png”);});});

  • 问题内容: 是否可以使用JavaScript来控制显示图像的哪一帧和/或停止动画。我希望能够加载多个框架并仅显示其中一个。 我知道我可以用很多单独的图像来做,但是如果我可以用来做我想做的事,那就只需要担心一个文件了。 问题答案: 您可以使用libgif库。 它使您可以启动/停止gif并控制gif所在的帧。 (大多数代码直接取自其示例)

  • 我通过使用windowmanager AddView在应用程序中自定义通知。 Android.view.WindowManager$BadTokenException:无法添加窗口--令牌Android.os.BinderProxy@74B2EFF无效;你的活动在进行吗?在Android.view.viewrootimpl.setView(viewrootimpl.java:685),在Andro

  • Examples // Opens a new dialog with the file.htm file and the size 320x240 // It also adds a custom parameter this can be retrieved by using tinyMCEPopup.getWindowArg inside the dialog. tinymce.active