java-Cardview阴影在旋转或烂Cardview之后会重绘自身

java-Cardview阴影在旋转或烂Cardview之后会重绘自身,第1张

概述我发现CardView阴影的行为非常奇怪.我只是开始开发一个应用程序,而且绝对没有任何业务逻辑或类似的东西.但无论如何…我只是在片段布局中添加了一些视图,然后发现,每次屏幕旋转后,cardview的阴影都会变暗.经过5-6次旋转后,它看起来已经完全变成黑色了.我猜,问题可能出在画布上的

我发现CardVIEw阴影的行为非常奇怪.
我只是开始开发一个应用程序,而且绝对没有任何业务逻辑或类似的东西.但无论如何…

我只是在片段布局中添加了一些视图,然后发现,每次屏幕旋转后,cardvIEw的阴影都会变暗.经过5-6次旋转后,它看起来已经完全变成黑色了.我猜,问题可能出在画布上的某个地方,但不知道在哪里以及为什么-我什至没有开始自定义任何内容.
我希望有人已经用CardvIEw解决了类似的问题,现在可以分享这一经验.

谢谢!

这是屏幕截图,代码,依赖项和xml:

XML格式

<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    xmlns:iot="http://schemas.androID.com/apk/res-auto"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent"    androID:gravity="center_horizontal"    androID:orIEntation="vertical">    <androID.support.v7.Widget.CardVIEw        androID:ID="@+ID/content_container"        androID:layout_wIDth="match_parent"        androID:layout_height="match_parent"        androID:layout_margin="@dimen/common_gap"        iot:cardElevation="10dp"        iot:cardUseCompatpadding="true">        <ScrollVIEw            androID:layout_wIDth="match_parent"            androID:layout_height="match_parent">            <linearLayout                androID:layout_wIDth="match_parent"                androID:layout_height="match_parent"                androID:gravity="center_horizontal"                androID:orIEntation="vertical">                <DatePicker                    androID:layout_wIDth="wrap_content"                    androID:layout_height="wrap_content"                    androID:layout_gravity="center_horizontal"                    androID:layout_margintop="@dimen/common_gap"                    androID:calendarVIEwShown="true"                    androID:spinneRSShown="false" />                <button                    androID:layout_wIDth="wrap_content"                    androID:layout_height="wrap_content"                    androID:background="?attr/selectableItemBackground"                    androID:paddingleft="@dimen/common_gap"                    androID:paddingRight="@dimen/common_gap"                    androID:text="@string/choose_date_confirm_button"                    androID:textcolor="@color/colorPrimary" />            </linearLayout>        </ScrollVIEw>    </androID.support.v7.Widget.CardVIEw></linearLayout>

Java(片段类中没有其他内容)

@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater, @Nullable VIEwGroup container, @Nullable Bundle savedInstanceState) {        VIEw rootVIEw = inflater.inflate(R.layout.date_choose_fragment, container, false);        return rootVIEw;    }

依存关系

compile 'com.androID.support:appcompat-v7:25.0.1'compile 'com.androID.support:cardvIEw-v7:25.0.1'

Screenshots

解决方法:

这很可能不是由于CardVIEw的任何错误或其阴影绘制.相反,这可能是由于多个具有透明背景的片段相互堆叠在一起的结果,而变暗的阴影是阴影半透明的累加效果.

“活动”处于活动状态时会自动重新创建“活动片段”实例,默认情况下会在方向更改时发生.例如,如果您无条件添加动态Fragment实例,则在Activity的onCreate()方法中,该实例将与从Activity的先前状态重新创建的所有实例一起添加.实际上,每次旋转设备时,您都要向堆栈中添加另一个Fragment,并且阴影会变暗一些.

这可以用一个简单的TextVIEw来演示,以表明这不是CardVIEw特有的问题.

fragment.xml

<TextVIEw xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent"    androID:gravity="center"    androID:text="Hello World!"    androID:textSize="60sp"    androID:textStyle="bold"    androID:textcolor="#fffbc02d"    androID:shadowcolor="#70707070"    androID:shadowDx="10"    androID:shadowDy="10"    androID:shadowRadius="10" />

如上所述,在示例Activity的onCreate()方法中,我们使用给定的布局添加了动态创建的Fragment.

public class MainActivity extends Activity  {    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        getFragmentManager().beginTransaction()            .add(androID.R.ID.content, new MainFragment()).commit();    }    public static class MainFragment extends Fragment {        public MainFragment() {}        @OverrIDe        public VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container,                                 Bundle savedInstanceState) {            return inflater.inflate(R.layout.fragment, container, false);        }    }}

此图像显示了旋转设备后的连续捕获,每个步骤两次.

如果将日志打印放在Fragment的onCreateVIEw()方法中,则会看到每次旋转都会创建一个附加实例.在该序列的结尾,我们正在播放11个片段.

一种防止这种情况的方法是,在创建和添加新片段之前检查Fragment是否已经连接到FragmentManager,我们可以通过在FragmentTransaction中添加标签来做到这一点.例如:

if (getFragmentManager().findFragmentByTag("main") == null) {    getFragmentManager().beginTransaction()        .add(androID.R.ID.content, new MainFragment(), "main").commit();}

另外,如果您不需要在启动后动态处理Fragment,则可以在布局中静态定义它,然后FragmentManager将自行处理检查和事务.

<fragment    androID:ID="@+ID/main_fragment"    androID:name="com.mycompany.myapp.MainFragment"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent" />
总结

以上是内存溢出为你收集整理的java-Cardview阴影在旋转或烂Cardview之后会重绘自身全部内容,希望文章能够帮你解决java-Cardview阴影在旋转或烂Cardview之后会重绘自身所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1091082.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存