Drawable子類之——ClipDrawable (裁剪圖像)

本文出自 “阿敏其人” 簡書博客,轉載或引用請注明出處。

ClipDrawable對應的標簽是<clip>,它可以根據自己的當前的level來裁剪一個Drawable。
主要是利用 clipOrientation(垂直/水平) 和 gravity(多種可選的方向),兩者結合使用。

一、語法

<?xml version="1.0" encoding="utf-8"?>
<clip
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:clipOrientation=["horizontal" | "vertical"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                     "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                     "center" | "fill" | "clip_vertical" | "clip_horizontal"] />

主要關注兩個節點,一個android:clipOrientation只有垂直和水平可選
android:gravity可選的就多啦

選項 作用
top 將內部的Drawable放在容器的頂部,不改變它的大小,如果為豎直裁剪,那么從底部開始裁剪
bottom 將內部的Drawable放在容器的底部,不改變它的大小,如果為豎直裁剪,那么從頂部開始裁剪
left 將內部的Drawable放在容器的左部,不改變它的大小,如果為水平裁剪,那么從右邊開始裁剪,這就是默認值
right 將內部的Drawable放在容器的右部,不改變它的大小,如果為水平裁剪,那么從左邊開始裁剪
center_vertica l 內部的Drawable在垂直方向上填充容器,如果是垂直裁剪,那么僅當ClipDrawable等級為0的時候,才能有裁剪行為
center_horizontal 使內部的Drawable在容器中水平居中,不改變它的大小,如果為水平裁剪,那么僅當ClipDrawable的等級為0時,才能有裁剪行為
center 是內部的Drawable在容器中水平和豎直方向都居中,不改變大小,如果為處置裁剪,那么從上下同時開始裁剪;如果為水平裁剪,那么左右同時開始裁剪
fill 使內部的Drawable在水平和垂直方向上同時填充容器,僅當ClipDrawable的等級為0時,才能有裁剪行為
clip_vertocal 附加選項,表示垂直方向的裁剪,較少使用
clip_horizoltal 附加選項,表示水平方向的裁剪,較少使用

二、demo

clipdrawable_simple.xml

<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@mipmap/star"
    android:clipOrientation="horizontal"
    android:gravity="bottom">
</clip>

.
.
布局

<?xml version="1.0" encoding="utf-8"?>
<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="200dp"
        android:layout_height="200dp"
        android:background="@mipmap/star"
        android:layout_marginBottom="20dp"/>


    <ImageView
        android:id="@+id/mIvClip"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="@drawable/clipdrawable_simple"
        />
</LinearLayout>


.
.
代碼


import android.app.Activity;
import android.graphics.drawable.ClipDrawable;
import android.os.Bundle;
import android.widget.ImageView;

public class MainActivity extends Activity {

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

        ImageView imageView = (ImageView) findViewById(R.id.mIvClip);
        //ClipDrawable clipDrawable = (ClipDrawable) imageView.getDrawable(); 這樣寫會報空指針異常
        ClipDrawable clipDrawable = (ClipDrawable) imageView.getBackground();
        clipDrawable.setLevel(5000);

    }
}

.
.
效果展示

效果展示.png

了解更多的Drawable分類 Drawable圖像資源抽象類
本篇完

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 轉載自Keegan小鋼并標明原文鏈接:http://keeganlee.me/post/android/20150...
    堅持編程_lyz閱讀 1,155評論 0 1
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,349評論 25 708
  • 一、 Drawable簡介 1 Drawable表示的是一種可以在Canvas上進行繪制的抽象的概念,可以是純顏色...
    黃海佳閱讀 1,239評論 0 10
  • 年初父母壽辰,我問父親想要什么禮物,父親說希望我時常打電話給他們,讓他知道我安好。聽后心里酸酸的,京津兩地...
    桂花樹下閱讀 296評論 0 0
  • 斜陽慵入飄渺然,雪樂輕舞涼意漫。 輕嘆淺淺溢唇畔,愁思淡...
    林軒竹閱讀 315評論 0 0