Cat beberapa nilai penghitungan/malar dan kesan bayangan ShadowLayer


Pengenalan kepada bahagian ini:

Dalam Tutorial pengenalan asas Android - 8.3.1 Penjelasan terperinci tentang tiga kelas alat lukisanParameter kaedah Paint, kami didedahkan kepada mereka Terdapat beberapa perkara seperti ini: Paint.Style, Paint.Cap, Paint.Join, dll. Ini ialah beberapa nilai penghitungan dalam Paint, berkaitan Kaedah: Kita boleh menetapkan kesan khusus dengan menetapkan nilai penghitungan ini, seperti: Gaya: gaya berus, Sertai kaedah gabungan grafik, dsb. Dalam bahagian ini kita pergi ke kod sumber Paint dan memperkenalkan nilai penghitungan ini satu demi satu Di samping itu, kita juga bercakap tentang ShadowLayer. Tetapkan Cat dengan kesan bayang! Buka kod sumber kelas Paint, kita boleh melihat nilai penghitungan berikut:

1.png
Baiklah, tiada BB, mari mulakan bahagian ini!

1.dapatkan penggunaan penghitungan:

Saya tidak tahu sama ada anda tidak biasa dengan penghitungan atau biasa dengannya. Berikut ialah kod panggilan yang berkaitan dengan Paint.Style (penghitungan dengan kaedah pembina parameter) angkat) , biarkan semua orang mengalaminya:

public enum Style {
    //定义枚举,通过括号赋值
    FILL            (0),
    STROKE          (1),
    FILL_AND_STROKE (2);
    //有参构造方法
    Style(int nativeInt) {
        this.nativeInt = nativeInt;
    }
    final int nativeInt;
}
//设置画笔Style的方法
public void setStyle(Style style) {
    native_setStyle(mNativePaint, style.nativeInt);
}
//JNI设置画笔风格的方法,这里我们无需关注
private static native void native_setStyle(long native_object, int style);

Mari jelaskan fungsi nilai penghitungan ini satu demi satu!


1.Cat.Gaya

Fungsi: Gaya berus Nilai pilihan:

  • ISI: isi dalam (lalai)
  • STROK: strok sahaja
  • FILL_AND_STROKE: Isi dalaman dan stroke

Panggilan kaedah: setStyle(Paint.Style style)Kesan sepadan:

2.png

2.Paint.Cap

Fungsi: Gaya sapuan, tetapkan grafik pada permulaan dan penghujung berus (titik pertama dan terakhir di mana berus mula melukis) Nilai pilihan:

  • BUTT: Lejang adalah segi empat tepat dan tidak melebihi laluan (lalai)
  • BULAT: Lejang ialah pekeliling
  • SEGI SEGI: Lejang ialah segi empat sama

Panggilan kaedah: setStrokeCap(Paint.Cap cap)

Kesan sepadan: Biasanya kita melukis yang pertama secara langsung, dua yang lain akan mempunyai lebih sedikit kawasan daripada yang biasa, dan yang kedua Ia adalah sudut bulat, dan yang ketiga adalah segi empat tepat!

3.png

3.Cat.Join

Fungsi: Tetapkan status sambungan, contohnya, baris anda terdiri daripada berbilang garis-garis kecil yang disambung bersama, bentuk yang disambungkan Nilai pilihan:

  • MITER: Sendi ialah sudut akut (lalai)
  • BULAT: Sendi ialah lengkok
  • BEVEL: Sambungan ialah garis lurus

Panggilan kaedah: setStrokeJoin(Paint.Join join)

Secara amnya digunakan untuk arka Untuk maklumat lanjut, sila rujuk Sebelumnya, Lap pakaian kecantikan Paparan Demo

Terdapat juga setStrokeMiter(float miter) untuk menetapkan kecondongan lejang, miter > Contohnya: semasa mengasah pensel yang saya gunakan semasa saya kecil, hujung pen mempunyai kesan yang berbeza apabila diasah secara menyerong atau menegak. Ia digunakan terutamanya untuk menetapkan gaya titik sambungan pukulan. Ia boleh dibandingkan dengan setStrokeJoin().


4.Cat.Jajar

Fungsi: Tetapkan kaedah penjajaran teks lukisan, yang relatif kepada koordinat permulaan [x, y] yang dilukis teks Nilai pilihan:

  • KIRI: Lukis teks di sebelah kiri koordinat permulaan
  • KANAN: Lukis di sebelah kanan permulaan koordinat Teks
  • PUSAT: Lukis teks

dengan koordinat sebenar sebagai pusat: setTextAlign(Paint.Align align)

Kesan sepadan: Di samping itu, setTextSize() boleh dipanggil untuk menetapkan saiz teks yang dilukis~

4.png

5.Paint.FontMetrics dan Paint.FontMetricsInt

Atribut fon dan ukuran, dua kaedah lain adalah sama, kecuali nilai yang diperoleh oleh yang terakhir ialah integer. Di sini kami memilih FontMetricsInt untuk menerangkan kepada anda Terdapat lima nilai tetap berikut. Kedudukan garis bawah (Garis Dasar)

  • atas: jarak dari aksara tertinggi ke garis dasar, iaitu nilai maksimum pendakian
  • pendakian: Jarak dari titik tertinggi aksara ke nilai garis dasar
  • turun: Jarak dari garis bawah ke titik terendah watak
  • bawah: Gariskan Jarak ke aksara paling rendah, iaitu nilai maksimum keturunan
  • menterajui: jarak antara keturunan watak dalam baris sebelumnya dan pendakian baris seterusnya

Kami melihat beberapa gambar untuk membantu memahami:

5.png
6.gif
7.png
Kemudian kami melukis rentetan huruf sesuka hati dan mencetak nilai ini: canvas.drawText(" abcdefghijklnmopqrstuvwxyz", 400, 400, mPaint1);

Log .e("HEHE", mPaint1.getFontMetricsInt().toString());
Run, Kita dapat melihat bahawa Log yang dicetak adalah seperti berikut:

8.png

Selepas membacanya, fikirkan dan lukiskannya. Ia sepatutnya tidak sukar untuk difahami! Hanya beritahu kami di sini, jika anda ingin mengetahui lebih lanjut Untuk penyelidikan yang mendalam, anda boleh merujuk artikel berikut: Android String Advanced Three: Font Properties and Measurements (FontMetrics)


6.ShadowLayer menetapkan kesan bayang

Kami telah mengajar anda untuk menetapkan kesan bayang untuk teks TextView dalam bahagian TextView dan Paint sebenarnya menyediakan tetapan API kesan bayang-bayang: setShadowLayer(jejari apungan, apungan dx, apungan dy, int shadowColor)

Parameter: jejari ialah sudut bayang-bayang, dx dan dy ialah bayang-bayang pada x- paksi dan jarak paksi-y, shadowColor ialah warna bayang-bayang Kita boleh menulis ayat yang sangat mudah untuk mengesahkan:

mPaint1.setShadowLayer(5,0,0,Color.BLACK);
canvas.drawText("毕竟基神~", 400, 400, mPaint1);    //绘制文字

Kesannya adalah seperti berikut:

9.png

Selain itu kami boleh juga memanggil clearShadowLayer()Untuk mengosongkan lapisan bayang ini~


Ringkasan bahagian ini:

Baiklah, bahagian ini akan menerangkan kepada anda tentang perkara dalam Cat Beberapa nilai penghitungan dan pemalar statik, dan ShadowLayer ialah berus Tetapkan kesan bayang-bayang atau panggil clearShadowLayer() untuk mengosongkan lapisan bayang-bayang Sebenarnya, anda boleh menyemak kod sumber untuk perkara ini sendiri. Dokumen, jika anda mempunyai sebarang keraguan, mulakan sahaja menulis Demo, dan banyak perkara akan menjadi jelas kepada anda secara semula jadi, itu sahaja, terima kasih~10.gif