日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Android形狀圖形與狀態列表圖形及九宮格圖片超詳細講解_Android

作者:Shewyoo ? 更新時間: 2022-11-17 編程語言

一、圖形Drawable

Drawable類型表達了各種各樣的圖形,包括圖片、色塊、畫板、背景等。

包含圖片在內的圖形文件放在res目錄的各個drawable目錄下,其中drawable目錄一般保存描述性的XML文件,而圖片文件一般放在具體分辨率的drawable目錄下。

各視圖的background屬性、ImageView和ImageButton的src屬性、TextView和Button四個方向的drawable***系列屬性都可以引用圖形文件。

二、形狀圖形

Shape圖形又稱形狀圖形,它用來描述常見的幾何形狀,包括矩形、圓角矩形、圓形、橢圓等。

形狀圖形的定義文件是以Shape標簽為根節點的XML描述文件。

實際開發一般主要使用3個節點:stroke、corners、solid。

1、類型的形狀:

  • rectangle:矩形,默認
  • oval:橢圓,此時corners節點失效
  • line:直線,此時必須設置stroke節點,不然報錯
  • ring:圓環

2、size(尺寸)

size是shape的下級節點,它描述了形狀圖形的寬高尺寸,若無size節點,則表示寬高與宿主視圖一樣大小,下面是size節點的常用屬性說明:

  • height:像素類型,圖形高度。
  • width:像素類型,圖形寬度。

3、stroke(描邊)

stroke是shape的下級節點,它描述了形狀圖形的描邊規格,若無stroke節點,則表示不存在描邊,下面是stroke節點的常用屬性說明:

  • color:顏色類型,描邊的顏色。
  • dashGap:像素類型,每段虛線之間的間隔。
  • dashWidth:像素類型,每段虛線的寬度,若dashGap和dashWidth有一個值為0,則描邊為實線。
  • wdith:像素類型,描邊的厚度。

4、corners(圓角)

corners是shape的下級節點,它描述了形狀圖形的圓角大小,若無corners節點,則表示無圓角,下面是常用屬性:

  • bottomLeftRadius:坐下圓角的半徑。
  • bottomRightRadius:右下圓角的半徑。
  • topLeftRadius:左上圓角的半徑。
  • topRightRadius:右上圓角的半徑。
  • radius:四個圓角的半徑。

5、solid(填充)

solid是shape的下級節點,它描述了形狀圖形的填充色彩,若無solid節點,則表示無填充顏色,下面的屬性說明:

  • color:內部填充的顏色。

6、padding(間隔)

padding是shape的下級節點,它描述了形狀圖形與周圍邊界的間隔,若無padding節點,則表示四周不設間隔,下面的常用屬性:

  • top:與上方的間隔。
  • bottom:與下方的間隔。
  • left:與左邊的間隔。
  • right:與右邊的間隔。

7、gradient(漸變)

gradient是shape的下級節點,它描述了形狀圖形的顏色漸變,若無gradient節點,則表示沒有漸變效果,下面的常用屬性:

  • angle:整型,漸變的起始角度,為0表示9點鐘位置,增值大表示往逆時針方向旋轉。
  • type:漸變類型。
漸變類型 說明
linear 線性漸變,默認
radial 放射漸變,起始顏色就是圓心顏色
sweep 滾動漸變,即一個線段以某個端點為圓心做360°旋轉
  • centerX:浮點型,圓心的X坐標,type=linear時不可用。
  • centerY:浮點型,圓心的Y坐標,type=linear時不可用。
  • gradientRadius:整型,漸變半徑,type=radial時需要設置。
  • centerColor:漸變的中間顏色。
  • startColor:漸變的起始顏色。
  • endColor:漸變的終止顏色。
  • useLevel:布爾類型,設置為true為無漸變色。

例:點擊按鈕切換圖形

xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <View
        android:id="@+id/v_content"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_margin="10dp"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/btn_rect"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="圓角矩形"/>
        <Button
            android:id="@+id/btn_oval"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="橢圓矩形"/>
</LinearLayout>
</LinearLayout>

drawable下新建rect.xml文件

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--指定形狀內部的填充顏色-->
    <solid android:color="#ffdd66"/>
<!--    指定形狀輪廓的粗細與顏色-->
    <stroke android:width="1dp"
            android:color="#aaaaaa"/>
<!--    指定形狀四個圓角的半徑-->
    <corners android:radius="10dp"/>
</shape>

oval.xml文件

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <!--指定形狀內部的填充顏色-->
    <solid android:color="#ff66aa"/>
    <!--    指定形狀輪廓的粗細與顏色-->
    <stroke android:width="1dp"
        android:color="#aaaaaa"/>
</shape>

java代碼

public class DrawableShapeActivity extends AppCompatActivity implements View.OnClickListener {
    private View v_content;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_drawable_shape);
        v_content = findViewById(R.id.v_content);
        findViewById(R.id.btn_rect).setOnClickListener(this);
        findViewById(R.id.btn_oval).setOnClickListener(this);
        //v_content的背景設置為圓角矩形
        v_content.setBackgroundResource(R.drawable.shape_rect_gold);
    }
    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btn_rect:
                v_content.setBackgroundResource(R.drawable.shape_rect_gold);
                break;
            case R.id.btn_oval:
                v_content.setBackgroundResource(R.drawable.shape_oval_rose);
                break;
        }
    }
}

運行結果:

三、九宮格圖片

將某張圖片設置成視圖背景時,如果圖片尺寸太小,則會自動拉伸使之填滿背景,但圖片拉的過大,會變得模糊。

使用九宮格圖片:將圖片后綴改為.9.png

四、狀態列表圖形

Button按鈕的背景在正常情況下是凸起的,在按下時是凹陷的,從按下到彈起的過程,用戶便能知道點擊了這個按鈕。

例:

當按鈕被按下時使用的是第一個item的圖片

<item android:drawable="@drawable/button_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/button_normal"/>

狀態類型的取值說明

狀態列表圖形不僅用于按鈕控件,還可用于其他擁有多種狀態的控件。

原文鏈接:https://blog.csdn.net/Tir_zhang/article/details/126967112

欄目分類
最近更新