12.5 Tinting和Clipping" class="reference-link">12.5 Tinting和Clipping
Android 5.X在对图像的操作上有了更多的功能,下面来看看Android 5.X的两个对操作图像的新功能——Tinting(着色)和Clipping(裁剪)。
12.5.1 Tinting(着色)" class="reference-link">12.5.1 Tinting(着色)
本例依然拿最熟悉的Android小机器人开刀,牺牲一下它的形象来帮助大家理解什么是Tinting(着色)。
Tinting的使用非常简单,只要在XML中配置好tint和tintMode就可以了。对于配置的组合效果,只需要大家实际操作一下,就能非常清楚地理解处理效果了,在下面的代码中,设置了几种不同的tint和tintMode来演示Tinting效果,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=".MainActivity">
- <ImageView
- android:layout_width="100dp"
- android:layout_height="100dp"
- android:elevation="5dip"
- android:layout_gravity="center"
- android:src="@drawable/ic_launcher" />
- <ImageView
- android:layout_width="100dp"
- android:layout_height="100dp"
- android:elevation="5dip"
- android:layout_gravity="center"
- android:src="@drawable/ic_launcher"
- android:tint="@android:color/holo_blue_bright" />
- <ImageView
- android:layout_width="100dp"
- android:layout_height="100dp"
- android:elevation="5dip"
- android:layout_gravity="center"
- android:src="@drawable/ic_launcher"
- android:tint="@android:color/holo_blue_bright"
- android:tintMode="add" />
- <ImageView
- android:layout_width="100dp"
- android:layout_height="100dp"
- android:elevation="5dip"
- android:layout_gravity="center"
- android:src="@drawable/ic_launcher"
- android:tint="@android:color/holo_blue_bright"
- android:tintMode="multiply" />
- </LinearLayout>
效果如图12.10所示。
图12.10 Tint
Tint通过修改图像的Alpha遮罩来修改图像的颜色,从而达到重新着色的目的。这一功能在一些图像处理App中使用起来将非常方便。
12.5.2 Clipping(裁剪)" class="reference-link">12.5.2 Clipping(裁剪)
Clipping可以让我们改变一个视图的外形。要使用Clipping ,首先需要使用ViewOutlineProvider来修改outline,然后再通过setOutlineProvider将outline作用给视图。
在下面这个例子中,将一个正方形的TextView通过Clipping裁剪成了一个圆角正方形和一个圆,以此来帮助大家理解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=".MainActivity">
- <TextView
- android:id="@+id/tv_rect"
- android:layout_marginTop="20dp"
- android:layout_width="100dp"
- android:layout_height="100dp"
- android:elevation="1dip"
- android:layout_gravity="center" />
- <TextView
- android:id="@+id/tv_circle"
- android:layout_width="100dp"
- android:layout_height="100dp"
- android:elevation="1dip"
- android:layout_gravity="center" />
- </LinearLayout>
程序代码如下所示。
- package com.xys.myapplication;
- import android.app.Activity;
- import android.graphics.Outline;
- import android.os.Bundle;
- import android.view.View;
- import android.view.ViewOutlineProvider;
- public class MainActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- View v1 = findViewById(R.id.tv_rect);
- View v2 = findViewById(R.id.tv_circle);
- //获取Outline
- ViewOutlineProvider viewOutlineProvider1 =
- new ViewOutlineProvider() {
- @Override
- public void getOutline(View view, Outline outline) {
- //修改outline为特定形状
- outline.setRoundRect(0, 0,
- view.getWidth(),
- view.getHeight(), 30);
- }
- };
- //获取Outline
- ViewOutlineProvider viewOutlineProvider2 =
- new ViewOutlineProvider() {
- @Override
- public void getOutline(View view, Outline outline) {
- //修改outline为特定形状
- outline.setOval(0, 0,
- view.getWidth(),
- view.getHeight());
- }
- };
- //重新设置形状
- v1.setOutlineProvider(viewOutlineProvider1);
- v2.setOutlineProvider(viewOutlineProvider2);
- }
- }
效果如图12.11所示。
图12.11 Clipping效果
