Android基于Window.ID_ANDROID_CONTENT给定id添加子View


这一技术特点在一些视频播放器中比较有用。

例如代码:

package zhangphil.demo;import android.app.Activity;import android.content.Context;import android.content.ContextWrapper;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.widget.FrameLayout;public class MainActivity extends AppCompatActivity {    private static final int VIEW_ID = 0xf0a01;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //setContentView(R.layout.activity_main);        int w = 500;        int h = 500;        int gap = 100;        addView(w, h, getResources().getColor(android.R.color.holo_orange_light));        addView(w - gap, h - gap, getResources().getColor(android.R.color.holo_green_light));        addView(w - gap * 2, h - gap * 2, getResources().getColor(android.R.color.holo_red_light));    }    private void addView(int w, int h, int color) {        ViewGroup vp = (ViewGroup) (scanForActivity(this))//.getWindow().getDecorView();                .findViewById(Window.ID_ANDROID_CONTENT);        View old = vp.findViewById(VIEW_ID);        if (old != null) {            vp.removeView(old);        }        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(w, h, Gravity.CENTER);        FrameLayout newView = new FrameLayout(this);        newView.setBackgroundColor(color);        newView.setId(VIEW_ID);        vp.addView(newView, params);    }    public static Activity scanForActivity(Context context) {        if (context == null) return null;        if (context instanceof Activity) {            return (Activity) context;        } else if (context instanceof ContextWrapper) {            return scanForActivity(((ContextWrapper) context).getBaseContext());        }        return null;    }}



运行结果:

Android基于Window.ID_ANDROID_CONTENT给定id添加子View_第1张图片



如果在addView里面把这段代码注释掉:

//        View old = vp.findViewById(VIEW_ID);//        if (old != null) {//            vp.removeView(old);//        }


运行结果。

Android基于Window.ID_ANDROID_CONTENT给定id添加子View_第2张图片

这一特性如果巧妙加以利用可制作成特殊视频view的呈现。

更多相关文章

  1. Android 通知的基本用法示例代码
  2. Android的AnimationSet动画实现图片的轮播,移动和切换可以自定义
  3. Android使用代码实现RelativeLayout,LinearLayout布局
  4. Android 从代码中打开淘宝和亚马逊、facebook、Message
  5. Android 软件运行前加载图片
  6. 修改dialog背景以及代码扩展AlertDialog和tint的使用
  7. android保存图片到sdcard后,在图片浏览器不能马上显示出来
  8. Android 用AsyncTask下载网络图片并显示百分比

随机推荐

  1. Android和设计模式:策略模式
  2. 字节跳动正式启动2021届秋季校招!这份字节
  3. Android——进程与线程
  4. 【幻灯片分享】Android音频口数据通信开
  5. 且谈Android内存溢出
  6. 里程碑2给Android市场造成哪些影响
  7. Android 架构简介
  8. android 根据设置的日期获取星期几
  9. Android 程式开发:(一)详解活动 —— 1.1 Ac
  10. 借一个项目谈Android应用软件架构,你还在