翻看谷歌源码 那些让人感兴趣的东西--L版本引入的CardView

标签: 源码谷歌gitandroid
1124人阅读 评论(2) 收藏 举报
分类:

转载请注明出处:王亟亟的大牛之路

刚才Safari一阵闪退,写了一长串的文章瞬间崩塌,内心崩溃。。。。。。。

最近做的都是Web的东西,git又没找到什么想介绍的,就继续翻Google的例子,今天是CardView

官方下载地址:https://developer.android.com/downloads/samples/CardView.zip

因为有墙,我做到自己git里了,传送门:https://github.com/ddwhan0123/BlogSample/tree/master/CardView

附件地址:https://github.com/ddwhan0123/BlogSample/blob/master/CardView/CardView.zip?raw=true

在介绍内容和看效果前,继续安利(每天都在更):https://github.com/ddwhan0123/Useful-Open-Source-Android

Ok,废话不说了,看下运行效果

这里写图片描述

CardView很好的处理了我们之前用shape和selector做的事。

看下如何使用

XML:

  <android.support.v7.widget.CardView
            android:id="@+id/cardview"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:elevation="100dp"
            card_view:cardBackgroundColor="@color/cardview_initial_background"
            card_view:cardCornerRadius="8dp"
            android:layout_marginLeft="@dimen/margin_large"
            android:layout_marginRight="@dimen/margin_large"
            >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="@dimen/margin_medium"
                android:text="@string/cardview_contents"
                />
        </android.support.v7.widget.CardView>

他继承于FrameLayout,所以你就直接像ViewGroup一样往里塞东西就好了。

看下Activity部分的代码(详细注解)

/**
 * Fragment that demonstrates how to use CardView.
 * Fragment来演示如何使用CardView
 */
public class CardViewFragment extends Fragment {

    private static final String TAG = CardViewFragment.class.getSimpleName();

    /**
     * The CardView widget.
     * CardView控件
     */
    //@VisibleForTesting
    CardView mCardView;

    /**
     * SeekBar that changes the cornerRadius attribute for the {@link #mCardView} widget.
     * 用于拖拉圆角的SeekBar
     */
    //@VisibleForTesting
    SeekBar mRadiusSeekBar;

    /**
     * SeekBar that changes the Elevation attribute for the {@link #mCardView} widget.
     * 用于拖拉阴影的SeekBar
     */
    //@VisibleForTesting
    SeekBar mElevationSeekBar;

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @return A new instance of fragment NotificationFragment.
     * 跟之前几个例子一样,返回一个CardViewFragment的实例
     */
    public static CardViewFragment newInstance() {
        CardViewFragment fragment = new CardViewFragment();
        fragment.setRetainInstance(true);
        return fragment;
    }

    public CardViewFragment() {
        // Required empty public constructor
        //空构造
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        //填充布局
        return inflater.inflate(R.layout.fragment_card_view, container, false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        //具体获取对象
        mCardView = (CardView) view.findViewById(R.id.cardview);
        mRadiusSeekBar = (SeekBar) view.findViewById(R.id.cardview_radius_seekbar);
        mRadiusSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                //拖拽时打印
                Log.d(TAG, String.format("SeekBar Radius progress : %d", progress));
                mCardView.setRadius(progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                //Do nothing
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                //Do nothing
            }
        });

        mElevationSeekBar = (SeekBar) view.findViewById(R.id.cardview_elevation_seekbar);
        mElevationSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                Log.d(TAG, String.format("SeekBar Elevation progress : %d", progress));
                mCardView.setElevation(progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                //Do nothing
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                //Do nothing
            }
        });
    }
}

几乎每一个重要步骤都已经进行了解释。

CardView主要的2个属性如下:

圆角 card_view:cardCornerRadius

阴影 card_view:cardElevation

跟麻烦的XML定义圆角/阴影或再见吧!

这里给出传统的实现传送门:

http://blog.csdn.net/way_ping_li/article/details/8099092

http://www.yiqivr.com/2015/03/03/在Android中实现阴影效果/

这篇比较简单,没什么大营养,但是怕自己忘记还是写了,大家想看什么,想了解什么可以微信我(活人,不是公众号)

这里写图片描述

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:743252次
    • 积分:9830
    • 等级:
    • 排名:第1975名
    • 原创:208篇
    • 转载:5篇
    • 译文:6篇
    • 评论:920条
    博客专栏
    最新评论