Ringkasan 13 Drawable dalam Android Bahagian 1


Pengenalan kepada bahagian ini:

Bermula dari bahagian ini, kami akan mempelajari beberapa pengetahuan asas lukisan dan animasi dalam Android, dan bersedia untuk penyesuaian bahagian lanjutan kami. Letakkan asas! Dalam bahagian pertama, mari lihat Drawable dalam Android! Android memberikan kita sebanyak 13 jenis Boleh dilukis, dalam bahagian ini kita akan melukisnya satu persatu!

1.png


Nota-nota tentang penggunaan sumber Boleh Drawable

  • Drawable terbahagi kepada dua jenis: Salah satunya ialah sumber imej biasa kami Dalam Android Studio, kami biasanya meletakkannya dalam direktori res/mipmap. Ia berbeza daripada Eclipse sebelumnya! Di samping itu, jika kami menukar projek kepada mod projek Android, kami secara langsung Hanya lepaskan imej ke dalam direktori mipmap, dan AS akan mengklasifikasikannya secara automatik ke dalam hdpi, xhdpi...! Yang lain ialah sumber Drawable dalam bentuk XML yang ditulis oleh kami Kami biasanya meletakkannya dalam direktori res/drawable. Seterusnya, seperti butang paling biasa klik pada latar belakang menukar Selctor!
  • Dalam XML, kami boleh menetapkan Drawable terus melalui @mipmap atau @drawable Contohnya: android:background = "@mipmap/iv_icon_zhu" / "@drawable/btn_back_selctor" Dalam kod Java, kita boleh mendapatkan sumber boleh lukis melalui getDrawable Sumber(R.mipmap.xxx) Jika kami menetapkan latar belakang untuk kawalan tertentu, seperti ImageView, kami boleh terus memanggil control.getDrawale() dengan cara yang sama Objek boleh dilukis boleh diperolehi!
  • Nama sumber dalam boleh dilukis dalam Android mempunyai sekatan dan mestilah: [a-z0-9_.] (iaitu: ia hanya boleh dalam abjad angka dan dan .) , Dan ia tidak boleh bermula dengan nombor, jika tidak, kompilasi akan melaporkan ralat: Nama fail tidak sah: mesti mengandungi hanya [a-z0-9.]! huruf kecil! ! ! ! huruf kecil! ! ! huruf kecil! ——Sebut perkara penting tiga kali~

Baiklah, ini adalah perkara yang perlu diberi perhatian Mari belajar tentang 13 Drawable yang disediakan kepada kita dalam Android!


1.ColorDrawable

Jenis Drawable yang paling mudah, apabila kita melukis ColorDrawable ke Canvas (kanvas), Warna tetap akan digunakan untuk mengisi Paint, dan kemudian kawasan monokrom akan dilukis pada kanvas

1 ColorDrawable ditakrifkan dalam Java:

ColorDrawable drawable = new ColorDrawable(0xffff2200);  
txtShow.setBackground(drawable);

2) . Tentukan ColorDrawable dalam xml:

  <?xml version="1.0" encoding="utf-8"?>  <color  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:color="#FF0000"/>

Sudah tentu, penggunaan di atas tidak begitu berguna Lebih kerap, kami mencipta color.xml dalam direktori res/values. fail, dan kemudian tulis nilai warna untuk digunakan ke dalamnya, dan dapatkan nilai yang sepadan melalui @color apabila diperlukan, seperti:

3 Cipta fail color.xml

, seperti:

 <?xml version="1.0" encoding="utf-8"?>  <resources>  
    <color name="material_grey_100">#fff5f5f5</color>
    <color name="material_grey_300">#ffe0e0e0</color>
    <color name="material_grey_50">#fffafafa</color>
    <color name="material_grey_600">#ff757575</color>
    <color name="material_grey_800">#ff424242</color>
    <color name="material_grey_850">#ff303030</color>
    <color name="material_grey_900">#ff212121</color></resources>

Kemudian jika ia berada dalam fail xml, kita boleh mendapatkan nilai warna yang sepadan melalui @color/xxx Jika ia dalam Java:

int mycolor = getResources().getColor(R.color.mycolor);    
btn.setBackgroundColor(mycolor);

ps: Satu lagi perkara yang perlu diperhatikan ialah jika kita mentakrifkan secara langsung nilai warna dalam Java, kita mesti menambah 0x, dan ketelusan tidak boleh dilepaskan:

int mycolor = 0xff123456;    
btn.setBackgroundColor(mycolor);

4. Gunakan warna yang ditentukan sistem:

Contohnya: HITAM (hitam), BIRU (biru), CYAN (cyan), KELABU (kelabu), HIJAU (hijau), MERAH ( merah), TULIS (putih), KUNING (kuning)! Penggunaan: btn.setBackgroundColor(Color.BLUE);Anda juga boleh mendapatkan warna sistem dan menetapkannya:

int getcolor = Resources.getSystem().getColor(android.R.color.holo_green_light);  
btn.setBackgroundColor(getcolor);

Gunakan dalam xml: android:background="../ style/images /black"

5). Gunakan kaedah statik argb untuk menetapkan warna:

Android menggunakan data jenis int untuk mewakili nilai warna, biasanya perenambelasan, Iaitu, bermula dengan 0x, Takrif nilai warna ditakrifkan oleh alfa ketelusan dan tiga warna utama RGB (merah, hijau dan biru), bermula dengan "#", diikuti dengan:
Transparensi-Merah-Hijau-Biru;cth:# RGB #ARGB #RRGGBB #AARRGGBB
Setiap elemen diwakili oleh bait (8 bit), jadi julat nilai ialah 0~255 Anda boleh mengabaikan ketelusan apabila menetapkan warna dalam xml. Tetapi jika anda berada dalam kod Java, anda perlu menunjukkan dengan jelas nilai ketelusan Jika anda meninggalkannya, ini bermakna ketelusan yang lengkap Tidak akan ada kesan~ Sebagai contoh: Walaupun 0xFF0000 bermaksud merah, jika anda menulisnya secara langsung seperti ini, tidak akan ada apa-apa lagi, sebaliknya anda harus menulisnya seperti ini: 0xFFFF0000, ingat kod Java untuk menetapkan nilai warna, anda perlu menambah ketelusan di hadapan~ Contoh: (Parameter ialah: ketelusan, nilai merah, nilai hijau, nilai biru)txtShow.setBackgroundColor(Color.argb(0xff, 0x00, 0x00, 0x00));


2.NiewPatchDrawable

ialah gambar .9 Kami telah memperincikan cara bermain dengan gambar 1.6.9 (Sembilan Beradik) di bahagian sebelumnya. Biar saya terangkan kepada anda cara membuat gambar .9! Android FrameWork menggunakan kaedah yang cekap apabila memaparkan imej titik sembilan. Algoritma pengoptimuman grafik, kita boleh mencapai regangan imej adaptif tanpa sebarang pemprosesan khas~ Selain itu, apabila menggunakan AS, sila beri perhatian kepada perkara berikut:

  • 1. Gambar titik 9 tidak boleh diletakkan dalam direktori mipmap, tetapi perlu diletakkan dalam direktori boleh lukis!
  • 2. Gambar .9 dalam AS mesti ada garis hitam, kalau tak kompilasi pagi ni kata Ajun sepupu saya Artis syarikatnya memberinya gambar .9 tanpa garis hitam, mengatakan bahawa ia dibuat menggunakan perisian tertentu, dan kemudian mencetaknya pada Eclipse. Ia boleh digunakan Ya, tidak ada garis hitam. Rasanya ia adalah pengenalan AS Standard dalam gambar ke-9 ialah perlu ada kedai hitam atau garis hitam! Selain itu, sepupu saya memberi saya kaedah untuk membuang garis hitam: 9patch (.9) Bagaimana untuk membuang titik hitam/garisan hitam pada lukisan anda sendiri , tetapi adakah garis hitam itu benar-benar menjengkelkan .Saya tidak berasa gangguan obsesif-kompulsif! Perkara lain adalah untuk menyahmampat apk orang lain Apabila anda mengambil bahan .9, anda akan mendapati bahawa tiada garis hitam, dan anda juga akan mendapat ralat! Jika anda ingin mengeluarkan bahan .9 dengan garis hitam, anda perlu menyahkompilasi apk dan bukannya menyahmampatkannya secara langsung! ! ! Nyahkompilasi bahagian hadapan juga Saya telah pun memperkenalkannya, jadi saya tidak akan menerangkan butirannya di sini!

Kemudian perkenalkan dua perkara yang tidak berguna:

definisi xml NinePatchDrawable:

  <!--pic9.xml-->  <!--参数依次为:引用的.9图片,是否对位图进行抖动处理-->  <?xml version="1.0" encoding="utf-8"?>  <nine-patch  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:src="@drawable/dule_pic"  
    android:dither="true"/>

gunakan pembungkusan Bitmap.9 gambar :

<!--pic9.xml-->  <!--参数依次为:引用的.9图片,是否对位图进行抖动处理-->  <?xml version="1.0" encoding="utf-8"?>  <bitmap  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:src="@drawable/dule_pic"  
    android:dither="true"/>

3.ShapeDrawable

Shape Drawable, ia mentakrifkan bentuk geometri asas, seperti (segi empat tepat, bulatan, garisan, dll.), unsur akar ialah dan ada adalah banyak nod , nod yang berkaitan adalah seperti berikut:

  • ① <bentuk>:
  • ~ kelihatan : Tetapkan sama ada ia boleh dilihat
  • ~ bentuk: Bentuk, pilihan: segi empat tepat (segi empat tepat, termasuk segi empat sama), bujur (elips, termasuk bulatan), garisan (segmen garisan), cincin (cincin )
  • ~ Nisbah Jejari dalam: Sah hanya apabila bentuk adalah gelang, menunjukkan nisbah jejari dalam gelang kepada jejari Jika Jejari dalam ditetapkan, Ia akan diabaikan
  • ~ Inner Radius: Ia hanya sah apabila bentuk adalah cincin, menunjukkan saiz jejari dalam cincin
  • ~ Nisbah ketebalan: Apabila bentuk Ia hanya sah apabila bentuk cincin, dan nisbah ketebalan cincin jam tangan kepada jejari
  • ~ ketebalan: Ia sah apabila bentuk itu gelang, menunjukkan ketebalan gelang, iaitu perbezaan antara jejari luar dan jejari dalam
  • ~ Tahap penggunaan: Sah hanya apabila bentuk gelang, menunjukkan sama ada membenarkan bahagian cincin yang akan dipaparkan berdasarkan tahap
  • ②<saiz>:
  • ~ lebar: Lebar bentuk grafik
  • ~ tinggi: Ketinggian bentuk grafik
  • ③<kecerunan> : Mari kita bincangkan GradientDrawable nanti~
  • ④<pepejal>
  • ~ warna: warna isian latar belakang, tetapan pepejal akan menimpa tetapan kecerunan Semua kesan!!!!!!
  • ⑤<strok >
  • ~ lebar: Lebar jidar
  • ~ warna: Warna jidar
  • ~ Lebar pemuka: Panjang segmen garis putus-putus sempadan
  • ~ Gap pemuka: Segmen garis putus-putus sempadan Jarak
  • ⑥<conner>
  • ~ jejari: jejari fillet, boleh digunakan pada sudut atas, bawah, kiri dan kanan
  • ~ Jejari Kiri atas ,Jejari Kanan atas,Jejari Kiri Bawah,Jejari Kanan Bawah: Nilai sudut bulat ​​di kiri atas, kanan atas, kiri bawah dan kanan bawah ditetapkan mengikut keperluan anda!
  • ⑦<lapik>
  • kiri, atas, kanan, bawahm : Jidar di sebelah kiri atas, kanan dan arah bawah adalah teratur!

Contoh penggunaan: 2.3.1 Paparan Teks (kotak teks) penerangan terperinci

2.png


4.GradientDrawable

A Drawable dengan kawasan kecerunan yang boleh mencapai kecerunan linear, kecerunan mencapah dan kesan kecerunan berjubin Nod teras: <kecerunan/>, dengan atribut pilihan berikut:

  • startColor: warna permulaan kecerunan
  • centerColor: warna tengah kecerunan
  • endColor :Warna akhir kecerunan
  • jenis: Jenis kecerunan, pilihan (linear,jejari,sapu ), Kecerunan linear(sudut kecerunan boleh ditetapkan), kecerunan mencapah (mencapah dari pusat ke semua sisi), kecerunan jubin
  • pusatX: koordinat x bagi Arthur di tengah kecerunan, ambil Julat nilai ialah: 0~1
  • centerY: Y koordinat warna tengah kecerunan, julat nilai ialah: 0~1
  • sudut: Hanya kecerunan jenis linear yang sah, menunjukkan sudut kecerunan, yang mestilah gandaan 45
  • Jejari kecerunan: Hanya jejari dan sapuan kecerunan jenis adalah sah, jejari mesti ditetapkan, menunjukkan kesan kecerunan Jejari
  • useLevel: Tentukan sama ada hendak melukis kesan kecerunan berdasarkan tahap

Contoh kod: (Demonstrasi tiga kesan kecerunan ):

Jalankan pemaparan :

3.png

Pertama buat tiga fail xml kecerunan di bawah boleh dilukis:

(kecerunan linear) kecerunan_linear.xml:

<?xml version="1.0" encoding="utf-8"?><shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >
    <gradient
        android:angle="90"
        android:centerColor="#FFEB82"
        android:endColor="#35B2DE"
        android:startColor="#DEACAB" />

    <stroke
        android:dashGap="5dip"
        android:dashWidth="4dip"
        android:width="3dip"
        android:color="#fff" /></shape>

(kecerunan mencapah) jejari_kecerunan.xml: 🎜>

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadius="0dip"
    android:shape="ring"
    android:thickness="70dip"
    android:useLevel="false" >

    <gradient
        android:centerColor="#FFEB82"
        android:endColor="#35B2DE"
        android:gradientRadius="70"
        android:startColor="#DEACAB"
        android:type="radial"
        android:useLevel="false" /></shape>

(kecerunan berjubin) gradient_sweep.xml:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadiusRatio="8"
    android:shape="ring"
    android:thicknessRatio="3"
    android:useLevel="false" >

    <gradient
        android:centerColor="#FFEB82"
        android:endColor="#35B2DE"
        android:startColor="#DEACAB"
        android:type="sweep"
        android:useLevel="false" /></shape>

Memanggil tiga drawable

activity_main.xml:rreee

okey<🎜 yang mudah~ Sudah tentu, jika anda ingin melukis lebih rumit Untuk grafik, hanya menggunakan fail xml tidak mencukupi. Kesan yang lebih kompleks perlu diselesaikan melalui kod Java Demonstrasi berikut ialah kod sumber yang diambil daripada Internet:

Menjalankan rendering:

Kod pelaksanaan :

MainActivity.java:

 <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">

    <TextView
        android:id="@+id/txtShow1"
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:background="@drawable/gradient_linear" />

    <TextView
        android:id="@+id/txtShow2"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="@drawable/gradient_radial" />

    <TextView
        android:id="@+id/txtShow3"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@drawable/gradient_sweep" /></LinearLayout>

Kod menggunakan ShapeDrawable dan PathEffect, yang pertama adalah pembalut untuk grafik biasa; ArcShape, OvalShape, PathShape, RectShape, RoundRectShape

Dan PathEffect ialah kesan laluan, termasuk: CornerPathEffect, DashPathEffect dan DiscretePathEffect! Anda boleh membuat sempadan grafik yang kompleks...
Itu sahaja tentang kecerunan GradoemtDrawable ini Jika anda berminat dengan perkara terakhir, anda boleh pergi ke: appium/android-apidemos


Ringkasan bahagian ini:

Baiklah, dalam bahagian ini kita akan mempelajari ColorDrawable, NiewPatchDrawable, ShapeDrawable, GradientDrawable4.jpgEmpat Drawable terlebih dahulu, ini hanyalah nasi goreng ditulis sebelum ini, tetapi untuk kesempurnaan tutorial, saya memutuskan untuk Tulis semula ~ Selain itu, selepas menulis tutorial asas, beberapa blog yang ditulis sebelum ini akan dipadamkan!