44-android5.0 Palette和Clipping

android5.0 Palette和Clipping

效果图:

这里写图片描述

案例代码:

xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="www.weshared.android5.MainActivity">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_gravity="center_horizontal"
        android:layout_margin="30dp"
        android:elevation="10dp"
        android:gravity="center" />

    <ImageView
        android:id="@+id/iv"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_gravity="center_horizontal"
        android:layout_margin="30dp"
        android:elevation="10dp"
        android:scaleType="fitXY"
        android:src="@mipmap/team" />
</LinearLayout>

MianActivity

public class MainActivity extends AppCompatActivity {

    private Toolbar mToolbar;
    private TextView textView;
    private ImageView imageView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        mToolbar.setTitle(getString(R.string.app_name));
        mToolbar.setNavigationIcon(R.mipmap.ic_launcher);

        textView = (TextView) findViewById(R.id.tv);

        imageView = (ImageView) findViewById(R.id.iv);

        Android5Utils.paletteColor(mToolbar, getResources(), R.mipmap.team, Android5Utils.State.MUTE_LIGHT, Android5Utils.StateColor.RGB);
        Android5Utils.paletteColor(textView, getResources(), R.mipmap.team, Android5Utils.State.VIBRANT_NORMAL, Android5Utils.StateColor.RGB);

        textView.setClipToOutline(true);
        Android5Utils.setShape(Android5Utils.ShapeState.RECT_ROUND, textView, 60, null, null);
        imageView.setClipToOutline(true);
        Android5Utils.setShape(Android5Utils.ShapeState.OVAL, imageView, 0, null, null);
    }
}

Android5Utils工具类

public class Android5Utils {

    private static ViewOutlineProvider provider;

    public enum State {
        MUTE_NORMAL, VIBRANT_NORMAL, MUTE_DRAK, VIBRANT_DRAK, MUTE_LIGHT, VIBRANT_LIGHT
    }

    public enum StateColor {
        RGB, POPULATION, BODY_COLOR, TITLE_COLOR
    }

    public enum ShapeState {
        RECT, OVAL, RECT_ROUND, PATH;
    }

    public static void paletteColor(final View view, Resources res, @DrawableRes int id, final State state, final StateColor color) {
        Bitmap bitmap = BitmapFactory.decodeResource(res, id);
        if (bitmap == null) return;
        Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
            @Override
            public void onGenerated(Palette palette) {
                if (palette != null) {
                    Palette.Swatch swatch = getSwatch(palette, state);
                    setViewColor(view, swatch, color);
                }
            }
        });
    }

    private static Palette.Swatch getSwatch(Palette palette, State state) {
        Palette.Swatch swatch;
        switch (state) {
            case MUTE_NORMAL:
                swatch = palette.getMutedSwatch();
                break;
            case VIBRANT_NORMAL:
                swatch = palette.getVibrantSwatch();
                break;
            case MUTE_DRAK:
                swatch = palette.getDarkMutedSwatch();
                break;
            case VIBRANT_DRAK:
                swatch = palette.getDarkVibrantSwatch();
                break;
            case MUTE_LIGHT:
                swatch = palette.getLightMutedSwatch();
                break;
            case VIBRANT_LIGHT:
                swatch = palette.getLightVibrantSwatch();
                break;
            default:
                swatch = palette.getMutedSwatch();
                break;
        }
        return swatch;
    }

    private static void setViewColor(View view, Palette.Swatch swatch, StateColor color) {
        if (swatch != null) {
            int colorInt;
            switch (color) {
                case RGB:
                    colorInt = swatch.getRgb();
                    break;
                case POPULATION:
                    colorInt = swatch.getPopulation();
                    break;
                case BODY_COLOR:
                    colorInt = swatch.getBodyTextColor();
                    break;
                case TITLE_COLOR:
                    colorInt = swatch.getTitleTextColor();
                    break;
                default:
                    colorInt = swatch.getRgb();
                    break;
            }
            view.setBackgroundColor(colorInt);
        }
    }

    public static void setShape(final ShapeState state, final View v, final float r, final Rect rect, final Path path) {
        switch (state) {
            case RECT:
                provider = new ViewOutlineProvider() {
                    @Override
                    public void getOutline(View view, Outline outline) {
                        if (rect == null) {
                            outline.setRect(0, 0, view.getWidth(), view.getHeight());
                        } else {
                            outline.setRect(rect);
                        }
                    }
                };
                v.setOutlineProvider(provider);
                break;
            case OVAL:
                provider = new ViewOutlineProvider() {
                    @Override
                    public void getOutline(View view, Outline outline) {
                        if (rect == null) {
                            outline.setOval(0, 0, view.getWidth(), view.getHeight());
                        } else {
                            outline.setOval(rect);
                        }
                    }
                };
                v.setOutlineProvider(provider);
                break;
            case RECT_ROUND:
                provider = new ViewOutlineProvider() {
                    @Override
                    public void getOutline(View view, Outline outline) {
                        if (rect == null) {
                            outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), r);
                        } else {
                            outline.setRoundRect(rect, r);
                        }
                    }
                };
                v.setOutlineProvider(provider);
                break;
            case PATH:
                provider = new ViewOutlineProvider() {
                    @Override
                    public void getOutline(View view, Outline outline) {
                        if (path != null) {
                            outline.setConvexPath(path);
                        }
                    }
                };
                break;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值