Android基于Window.ID_ANDROID_CONTENT给定id添加子View
16lz
2021-01-23
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; }}
运行结果:
如果在addView里面把这段代码注释掉:
// View old = vp.findViewById(VIEW_ID);// if (old != null) {// vp.removeView(old);// }
运行结果。
这一特性如果巧妙加以利用可制作成特殊视频view的呈现。
更多相关文章
- Android 通知的基本用法示例代码
- Android的AnimationSet动画实现图片的轮播,移动和切换可以自定义
- Android使用代码实现RelativeLayout,LinearLayout布局
- Android 从代码中打开淘宝和亚马逊、facebook、Message
- Android 软件运行前加载图片
- 修改dialog背景以及代码扩展AlertDialog和tint的使用
- android保存图片到sdcard后,在图片浏览器不能马上显示出来
- Android 用AsyncTask下载网络图片并显示百分比