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;
}
}
}