7

我对使用创建的阴影有疑问Elevation

我的屏幕由ViewPager4 个不同Fragments的和一个TabLayout用于导航的屏幕组成。第一个和最后一个片段都包含一个RecyclerView填充有CardView元素的片段。每当我在第 1 页和第 4 页之间切换时,CardView元素下方的阴影首先出现在远离其位置的位置,并在大约半秒后卡入正确的位置。

这仅在ViewPager. 如果我按从 1 到 4 的顺序移动,则不会发生这种情况。

其他所有带有 set 的元素Elevation都有这个问题,而不仅仅是CardView.

我的 ViewPager 实现:

mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager = (NoSwipeViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.setOffscreenPageLimit(4);
tabLayout.setupWithViewPager(mViewPager);

RecyclerView 中使用的 CardView 之一

<android.support.v7.widget.CardView
        style="@style/Custom.CarView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        card_view:cardUseCompatPadding="true" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/post_image"
            android:layout_width="match_parent"
            android:layout_height="179dp"
            android:layout_gravity="center"
            android:scaleType="centerCrop"
            app:imageUrl="@{photo.avatar_url}"
            tools:background="@color/com_facebook_blue" />

        <Button
            android:id="@+id/edit_item_imageView"
            style="@style/Widget.AppCompat.Button.Borderless"
            android:layout_width="29dp"
            android:layout_height="37dp"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:background="@android:color/transparent" />

        <ImageView
            android:id="@+id/image_edit"
            android:layout_width="12dp"
            android:layout_height="24dp"
            android:layout_alignParentRight="true"
            android:layout_marginRight="10dp"
            android:layout_marginTop="10dp"
            android:src="@drawable/profile_post_options" />

        <TextView
            android:id="@+id/textview_comment"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/post_image"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="10dp"
            android:text="@{photo.description}"
            android:textColor="@color/v3_primary_gray"
            android:textSize="12sp"
            android:visibility="@{photo.description.length() > 0 ? View.VISIBLE : View.GONE}"
            tools:text="comment"
            android:layout_marginBottom="@dimen/margin_bottom_matches"/>

    </RelativeLayout>
</android.support.v7.widget.CardView>

only的样式CardViewcardCornerRadius设置为 4dp。

阴影究竟是如何Elevation工作的?我需要设置任何特定属性来防止这种情况吗?或者我可以使用不同的方法来获得相同的阴影Elevation吗?

谢谢你的帮助。

4

1 回答 1

-1

我在同一个问题上苦苦挣扎并得到了解决,但我完全不知道阴影渲染是怎么回事。

当我像这样在视图寻呼机中创建页面时,我的问题出现了。

private final List<TestItem> challengeItems;
@Override
    public Object instantiateItem(ViewGroup container, int position) {

        View pageView = challengeItems.get(position);

        container.addView(view);
        return view;
    }

TestItem 是 LinearLayout 的一个实现(我用它作为模板)

公共类 TestItem 扩展 LinearLayout {

int position;


public TestItem(Context context) {
    super(context);
    init();

}

private void init() {
    inflate(getContext(), R.layout.test_card, this);
    ButterKnife.bind(this);
}

public void populateChallenge(Challenge challenge) {

}


public int getPosition() {
    return position;
}

public void setPosition(int position) {
    this.position = position;
}

}

当模板视图的膨胀没有给容器视图组(viewpager 的容器)时,问题就来了。阴影闪烁的修复将是

 @Override
    public Object instantiateItem(ViewGroup container, int position) {


        View view = LayoutInflater.from(container.getContext()).inflate(R.layout.test_card, **container**, false);
        container.addView(view);
        return view;
    }

我们将要加载到 viewpager 中的视图应该在其容器内膨胀。然后只有 ViewPager 转换器才能正确地在阴影上设置动画。

于 2017-10-14T17:32:25.230 回答