RelativeLayout如何移除先添加的View

雕·不懒惰 2020-06-12 04:27:49
private void showPageView() {
if (layMain.getVisibility() == View.GONE)
layMain.setVisibility(View.VISIBLE);
if (r_params != null)
r_params = null;
r_params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);

if (relativeLayout != null)
relativeLayout = null;
relativeLayout = new RelativeLayout(this);
relativeLayout.setLayoutParams(r_params);

for (View view : viewList)
relativeLayout.addView(view);

layMain.removeAllView();
layMain.addView(relativeLayout);
// if (layMain.getChildCount()>1)
// layMain.removeViewAt(0);
LogUtils.e("----getChildCount()---- "+layMain.getChildCount());

}
1:layMain先removeAllView,再一个个View添加,出现明显的一个个View慢慢显示(不是同时全部显示)
2:先将所有View添加到一个layout,再添加到layMain,
layMain.removeAllView();
layMain.addView(relativeLayout);
还是出现一样的效果

想实现的是layMain隔断时间移除原来的所有view(因为新添加的子view类型、数量、位置不一样)
再显示新添加的所有view,中间不出现闪烁、同时显示所有view

...全文
22468 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
王能 2020-06-28
  • 打赏
  • 举报
回复
你这个问题是视频播放的问题,害得大家瞎想半天 开始黑屏一般是因为视频没缓冲出来导致的,我用的也不多你问问他们吧
雕·不懒惰 2020-06-24
  • 打赏
  • 举报
回复
引用 9 楼 王能 的回复:
首先,建议使用frameLayout
其次,尽量减少外部的布局层级

最后重要的问题:你的child在add之后不要频繁的引起重绘,如你add了100个ImageView,并且每个image都相互关联的(如一直都下一个below上一个),这时会出现每加载出来一张图片就重绘重绘重绘...至少200次以上才能加载完成

优化建议:宽高尽量固定,每个child不要有关联性

如我写的1000个textview,秒出:

RelativeLayout rv = new RelativeLayout(MainActivity.this);
for (int i = 0; i < 1000; i++) {
AppCompatTextView tv = new AppCompatTextView(MainActivity.this);
tv.setText("这是" + i);
tv.setTextColor(0xff000000);
RecyclerView.LayoutParams params = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.leftMargin = i;
params.topMargin = i * 2;
tv.setLayoutParams(params);
rv.addView(tv);
}
mFl.removeAllViews();
mFl.addView(rv, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);


后台获取的控件属性有: 宽高,距离左右上下的边界距离,
有图片、视频、文字单一个或者混合,不会太多,最多不超过5个
现在做法是把所有控件先放到一个relativeLayout
然后layoutMain添加之后再移除上一个
但是在播放视频的时候回先闪黑屏,暂时是先给mediaPlayer设置视频第一帧背景,在OnInfoListener
里面去掉背景,但还是会闪一下,并没找到其他好的解决办法
王能 2020-06-24
  • 打赏
  • 举报
回复
首先,建议使用frameLayout 其次,尽量减少外部的布局层级 最后重要的问题:你的child在add之后不要频繁的引起重绘,如你add了100个ImageView,并且每个image都相互关联的(如一直都下一个below上一个),这时会出现每加载出来一张图片就重绘重绘重绘...至少200次以上才能加载完成 优化建议:宽高尽量固定,每个child不要有关联性 如我写的1000个textview,秒出:

                RelativeLayout rv = new RelativeLayout(MainActivity.this);
                for (int i = 0; i < 1000; i++) {
                    AppCompatTextView tv = new AppCompatTextView(MainActivity.this);
                    tv.setText("这是" + i);
                    tv.setTextColor(0xff000000);
                    RecyclerView.LayoutParams params = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                    params.leftMargin = i;
                    params.topMargin = i * 2;
                    tv.setLayoutParams(params);
                    rv.addView(tv);
                }
                mFl.removeAllViews();
                mFl.addView(rv, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
雕·不懒惰 2020-06-15
  • 打赏
  • 举报
回复
引用 1 楼 麦田捕手 的回复:
建议使用listview实现吧


我的视图并不是i列表,页面就是一个layout,定时从后台拿控件数据,控件数量、属性、位置不定,每次拿到的数据跟之前不同,就重新渲染页面,现在问题是重新渲染时所有子控件并不是同时显示的
qq_31699831 2020-06-15
  • 打赏
  • 举报
回复
如果简单的来,就做一个延时动画,添加子view到同一个view,再把view放到layout上,每次添加子view的时候判断数量,添加完了再添加到layout显示,复杂点就自定义吧,自己绘制子view和layout,多线程同时绘制,可以达到同时出现的效果
le540850072 初级 2020-06-13
  • 打赏
  • 举报
回复
引用 5 楼 麦田捕手 的回复:
[quote=引用 4 楼 le540850072 的回复:] [quote=引用 3 楼 麦田捕手 的回复:] [quote=引用 2 楼 le540850072 的回复:] [quote=引用 1 楼 麦田捕手 的回复:] 建议使用listview实现吧
为什么不建议使用Recyclerview[/quote] 都可以啊,看那种用的方便顺手就用哪种[/quote] 哦。ListView现在是不是在逐渐弃用了。?[/quote] 没有,Listview是一种成熟可靠的UI控件,我至今已经用了11年了。Recyclerview最近几年也在用,这控件刚出来时,bug或者兼容性等问题较多,现在好很多了。[/quote] 好的,谢谢。
麦田捕手 2020-06-13
  • 打赏
  • 举报
回复
引用 4 楼 le540850072 的回复:
[quote=引用 3 楼 麦田捕手 的回复:] [quote=引用 2 楼 le540850072 的回复:] [quote=引用 1 楼 麦田捕手 的回复:] 建议使用listview实现吧
为什么不建议使用Recyclerview[/quote] 都可以啊,看那种用的方便顺手就用哪种[/quote] 哦。ListView现在是不是在逐渐弃用了。?[/quote] 没有,Listview是一种成熟可靠的UI控件,我至今已经用了11年了。Recyclerview最近几年也在用,这控件刚出来时,bug或者兼容性等问题较多,现在好很多了。
le540850072 初级 2020-06-13
  • 打赏
  • 举报
回复
引用 3 楼 麦田捕手 的回复:
[quote=引用 2 楼 le540850072 的回复:] [quote=引用 1 楼 麦田捕手 的回复:] 建议使用listview实现吧
为什么不建议使用Recyclerview[/quote] 都可以啊,看那种用的方便顺手就用哪种[/quote] 哦。ListView现在是不是在逐渐弃用了。?
麦田捕手 2020-06-13
  • 打赏
  • 举报
回复
引用 2 楼 le540850072 的回复:
[quote=引用 1 楼 麦田捕手 的回复:] 建议使用listview实现吧
为什么不建议使用Recyclerview[/quote] 都可以啊,看那种用的方便顺手就用哪种
le540850072 初级 2020-06-13
  • 打赏
  • 举报
回复
引用 1 楼 麦田捕手 的回复:
建议使用listview实现吧
为什么不建议使用Recyclerview
麦田捕手 2020-06-13
  • 打赏
  • 举报
回复
建议使用listview实现吧

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧