Penjelasan terperinci tentang tiga kelas alat lukisan
Pengenalan kepada bahagian ini:
Dalam dua bahagian terakhir kita mempelajari tentang Drawable dan Bitmap, yang kedua-duanya memuatkan imej dan dalam bahagian ini kita akan belajar tentang lukisan. Sesetengah API, ia adalah Kanvas (kanvas), Cat (berus), Laluan (laluan)! Bahagian ini sangat penting dan ia juga merupakan bahagian kami Asas menyesuaikan View~Okay, tanpa berlengah lagi, mari mulakan bahagian ini~
Dokumentasi API rasmi: Kanvas; Cat Path ; Tetapkan gaya lukisan, seperti: lebar garisan (ketebalan lejang), warna, ketelusan dan gaya isian, dsb. Anda boleh mencipta contoh Paint secara langsung dengan menggunakan pembina tanpa parameter:
Paint paint = new Paint( ); Selain itu, Terdapat dua jenis atribut ini, Berkaitan lukisan grafik dan lukisan teks berkaitan:
- setARGB(int a, int r, int g, int b): Tetapkan warna lukisan, a mewakili ketelusan, r, g, b mewakili nilai warna.
- setAlpha(int a): Tetapkan ketelusan grafik yang dilukis.
- setColor(warna int): Tetapkan warna lukisan, diwakili oleh nilai warna, yang merangkumi ketelusan dan warna RGB.
- setAntiAlias(boolean aa): Tetapkan sama ada hendak menggunakan fungsi anti-aliasing, yang akan menggunakan banyak sumber dan memperlahankan kelajuan lukisan grafik.
- setDither(boolean dither): Tetapkan sama ada hendak menggunakan pemprosesan dithering imej, yang akan menjadikan warna gambar yang dilukis lebih licin dan penuh serta imej lebih jelas
- setFilterBitmap(penapis boolean): Jika item ini ditetapkan kepada benar, imej akan menapis operasi pengoptimuman imej Bitmap semasa animasi. Untuk mempercepatkan paparan, tetapan ini bergantung pada tetapan dither dan xfermode
- setMaskFilter(MaskFilter maskfilter): Tetapkan MaskFilter, anda boleh menggunakan MaskFilter yang berbeza untuk mencapai kesan penapis, seperti penapisan , Stereo, dsb.
- setColorFilter(ColorFilter colorfilter): Tetapkan penapis warna untuk mencapai kesan transformasi tanpa warna semasa melukis warna
- setPathEffect ( Kesan PathEffect) Tetapkan kesan laluan lukisan, seperti garisan bertitik, dsb.
- setShader(Shader shader): Tetapkan kesan imej, gunakan Shader untuk melukis pelbagai kesan kecerunan
- setShadowLayer(jejari apungan, float dx, float dy, warna int): Tetapkan lapisan bayang di bawah grafik untuk menghasilkan kesan bayang. jejari ialah sudut bayang-bayang, dx dan dy ialah jarak bayang-bayang pada paksi-x dan paksi-y, warna ialah warna bayang-bayang
- setStyle(Paint. Gaya gaya): Tetapkan gaya berus , untuk FILL, FILL_OR_STROKE, atau STROKE
- setStrokeCap(Paint.Cap cap): Apabila gaya berus STROKE atau FILL_OR_STROKE, tetapkan grafik gaya berus, Seperti gaya bulat Cap.ROUND, atau gaya segi empat sama Cap.SQUARE
- setSrokeJoin(Paint.Join join): Tetapkan cara untuk menggabungkan grafik semasa melukis, seperti kesan melicinkan, dsb.
- setStrokeWidth(lebar terapung): Apabila gaya berus adalah STROKE atau FILL_OR_STROKE, tetapkan ketebalan berus
- setXfermode(Xfermode) xfermode : Tetapkan grafik Kaedah pemprosesan bertindih, seperti penggabungan, persilangan atau penyatuan, selalunya digunakan untuk mencipta kesan pemadam
- setFakeBoldText(boolean fakeBoldText): Simulasi teks tebal, ditetapkan dalam Kesan akan menjadi sangat lemah pada fon kecil
- setSubpixelText(boolean subpixelText): Menetapkan item ini kepada benar akan membantu paparan teks pada skrin LCD
- setTextAlign(Paint.Align align): Tetapkan arah penjajaran teks yang dilukis
- setTextScaleX(float scaleX): Tetapkan nisbah penskalaan paksi-x teks yang dilukis, yang boleh merealisasikan penskalaan teks Kesan regangan
- setTextSize(float textSize): Tetapkan saiz fon teks yang dilukis
- setTextSkewX(float skewX): Tetapkan teks condong , Lidi
- setUnderlineText(boolean underlineText): Tetapkan kesan teks bergaris
- setStrikeThruText(boolean strikeThruText): Tetapkan kesan coretan
- setStrokeJoin(Paint.Join join): Tetapkan rupa sendi: Sendi ialah sudut akut. Bulat: Sendi ialah lengkok: BEVEL: Sendi ialah garis lurus
- setStrokeMiter(float miter): Tetapkan kecondongan berus
- setStrokeCap ( Paint.Cap cap): Tetapkan gaya sudut Kaedah lain yang biasa digunakan:
- terapung
kenaikan( ): ukur jarak dari garis dasar ke titik tertinggi aksara
- terapung
- turun(): Jarak dari garis dasar ke titik terendah watak int
- breakText(char [] text, int index, int count, float maxWidth, float[] measuredWidth): Kesan berapa banyak teks yang dipaparkan dalam baris
- clearShadowLayer(): kosongkan lapisan bayang-bayang Sila rujuk dokumen lain sendiri~
2) Kanvas:
Sekarang anda sudah mempunyai berus, kemudian pergi ke berus (Kanvas ). Anda tidak boleh menarik keluar dari udara nipis, kan~ Kaedah biasa adalah seperti berikut: Pertama ialahkaedah pembinaan Terdapat dua kaedah pembinaan untuk Kanvas:
Canvas() : Cipta kanvas kosong Anda boleh menggunakan kaedah setBitmap() untuk menetapkan kanvas khusus untuk lukisan.
Canvas(Bitmap bitmap): Cipta kanvas dengan objek bitmap dan lukis kandungan pada bitmap, jadi bitmap mestilah tidak batal.
Kemudian datang keluarga kaedah1.drawXXX(): lukis gambar dalam kawasan lukisan semasa dengan nilai koordinat tertentu, dan lapisan akan ditindih. Iaitu, lapisan yang dicat kemudian akan menutup lapisan yang dicat sebelum ini. Contohnya:
restore()<🎜. > kaedah:
- drawRect(RectF rect, Paint paint): kawasan lukis, parameter satu ialah kawasan RectF
- drawPath(Path path, Paint paint ) : Lukiskan laluan, parameter satu ialah objek Path
- drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint): Tekstur, parameter pertama ialah objek Bitmap biasa kami, parameter kedua ialah kawasan sumber (di sini ialah bitmap), Parameter ketiga ialah kawasan sasaran (kedudukan dan saiz kanvas), dan parameter keempat ialah objek berus Cat. Kerana kemungkinan penskalaan dan regangan, akan terdapat kehilangan prestasi yang ketara apabila Rect asal tidak sama dengan sasaran Rect.
- drawLine(float startX, float startY, float stopX, float stopY, Paintpaint): Lukis garis, kedudukan paksi-x titik permulaan parameter satu, kedudukan paksi-y titik permulaan parameter dua, kedudukan mendatar paksi-x titik akhir parameter tiga, Empat parameter ialah kedudukan menegak paksi-y, dan parameter terakhir ialah objek berus Cat.
- drawPoint(float x, float y, Cat cat): Untuk menarik mata, parameter pertama ialah paksi-x mendatar, parameter kedua ialah paksi-y menegak, dan parameter ketiga ialah objek Cat.
- drawText(Teks rentetan, apungan x, terapung, Cat cat): Untuk membuat teks, kelas Canvas juga boleh melukis teks sebagai tambahan kepada Parameter 1 ialah teks jenis String. Parameter kedua ialah paksi-x, parameter ketiga ialah paksi-y, dan parameter keempat ialah objek Cat.
- drawOval(RectF oval, Paint paint): Lukiskan elips, parameter pertama ialah kawasan imbasan, parameter kedua ialah objek cat; drawCircle
(float cx, float cy, float radius, Paint paint): Lukis bulatan, parameter satu ialah paksi-x bagi titik tengah, parameter dua ialah paksi-y bagi titik tengah, parameter tiga ialah jejari, parameter empat ialah objek cat ;- drawArc
(RectF bujur, float startAngle, float sweepAngle, boolean useCenter, Paint paint): Untuk melukis lengkok, parameter pertama ialah objek RectF Sempadan kawasan segi empat tepat dan elips digunakan untuk menentukan bentuk, saiz dan lengkok Parameter kedua ialah sudut permulaan. (Dasar) Pada permulaan arka, sudut imbasan parameter tiga (darjah) mula diukur mengikut arah jam, parameter empat adalah jika ini benar, termasuk arka elektrik di tengah elips Lengkok, dan tutupnya, jika palsu ini akan menjadi lengkok, parameter lima ialah objek Paint; kawasan lukisan digunting untuk mencipta kawasan lukisan baharu ini ialah kanvas. Kawasan lukisan semasa objek. Contohnya: clipRect(new Rect()), maka kawasan segi empat tepat ialah kawasan lukisan semasa kanvas- 3 save()
dansimpan( ): digunakan untuk menyimpan keadaan Kanvas. Selepas menyimpan, anda boleh memanggil terjemahan Canvas, penskalaan, putaran, pemotongan silang, pemangkasan dan operasi lain! pulihkan
(): Digunakan untuk memulihkan keadaan Kanvas yang disimpan sebelum ini. Elakkan operasi yang dilakukan pada Kanvas selepas menyimpan daripada menjejaskan lukisan seterusnya. Save() dan restore() hendaklah digunakan secara berpasangan (restore boleh kurang daripada save, tetapi tidak lebih jika restore dipanggil lebih banyak kali daripada save, ralat akan dilaporkan).4.terjemah(float dx, float dy): Terjemah, gerakkan asal koordinat kanvas x ke kiri dan kanan, dan y ke atas dan ke bawah Kedudukan lalai kanvas ialah (0,0)
5.skala(. float sx, float sy): Kembangkan, x ialah faktor pembesaran dalam arah mendatar, y ialah faktor pembesaran dalam arah menegak
6.putar(darjah apungan): Putaran, sudut merujuk kepada sudut putaran, mengikut urutan Putaran jam
3) Laluan
Secara ringkasnya, ia bermaksud titik lukisan dan garis penghubung ~ Selepas mencipta Path kami, kami boleh memanggil Kanvas drawPath(path,paint) Lukis grafik~ Kaedah biasa adalah seperti berikut:
lineTo
- addArc(RectF oval, float startAngle, float sweepAngle: tambah poligon pada laluan
- < . Tambah bujur
addRect- (RectF rect, Path.Direction dir): Tambah region
addRoundRect- (RectF rect, float[] radii , Path.Direction dir): Tambah kawasan bulat
isEmpty- (): Tentukan sama ada laluan kosong
transform- (Matriks matriks) : Gunakan penjelmaan matriks
transformasi- (Matriks matriks, Laluan dst): Gunakan penjelmaan matriks dan letakkan hasilnya ke laluan baharu, yang merupakan parameter lanjutan yang boleh menggunakan PathEffect kelas! Beberapa Kepada:
- moveTo
(float x, float y): tidak akan dilukis, hanya digunakan Gerakkan berus bergerak(float x, float y): digunakan untuk lukisan garis lurus, bermula dari (0, 0) secara lalai, gunakan moveTo untuk bergerak! contohnya mPath.lineTo(300, 300); canvas.drawPath(mPath, mPaint);
- quadTo(float x1, float y1, float x2, float y2): Digunakan untuk melukis lengkung licin, iaitu lengkung Bezier, dan juga boleh digunakan bersama dengan moveTo!
rCubicTo(float x1, float y1, float x2, float y2, float x3, float y3) Ia juga digunakan untuk melaksanakan lengkung Bezier. (x1,y1) ialah titik kawalan, (x2,y2) ialah titik kawalan, dan (x3,y3) ialah titik akhir. Sama seperti cubicTo, tetapi koordinat dianggap relatif kepada titik semasa pada kontur ini hanya satu lagi titik kawalan~ Lukiskan lengkung di atas: mPath.moveTo(100, 500); mPath.cubicTo(100, 500, 300, 100, 600, 500); Jika anda tidak menambah moveTo di atas: lukis lengkung Bezier dengan (0,0) sebagai titik permulaan, (100,500) dan (300,100) sebagai titik kawalan
- arcTo(RectF bujur, float startAngle, float sweepAngle): Lukis lengkok (sebenarnya memintas sebahagian daripada bulatan atau elips) ovalRectF ialah segi empat tepat elips, startAngle ialah sudut permulaan, sweepAngle ialah sudut hujung.
2. Cubalah:
Terdapat banyak sifat, kita mesti melaluinya langkah demi langkah untuk mendalami imej kita~ Hei, anda perlu melukis gambar pada View atau SurfaceView Mari lukis pada View di sini. Kami mentakrifkan kelas View dan kemudian menyelesaikan kerja lukisan dalam onDraw()!
/** * Created by Jay on 2015/10/15 0015. */ public class MyView extends View{ private Paint mPaint; public MyView(Context context) { super(context); init(); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public MyView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init(){ mPaint = new Paint(); mPaint.setAntiAlias(true); //抗锯齿 mPaint.setColor(getResources().getColor(R.color.puple));//画笔颜色 mPaint.setStyle(Paint.Style.FILL); //画笔风格 mPaint.setTextSize(36); //绘制文字大小,单位px mPaint.setStrokeWidth(5); //画笔粗细 } //重写该方法,在这里绘图 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); } }
Kemudian tetapkan Lihat ini dalam reka letak Kod berikut ditulis dalam onDrawable~
1) Tetapkan warna kanvas:
rreee.
2) Lukis bulatan:
canvas.drawColor(getResources().getColor(R.color.yellow)); //设置画布背景颜色
3) Lukis segi empat tepat:
canvas.drawCircle(200, 200, 100, mPaint); //画实心圆
4) Lukis Peta Bit:
canvas.drawRect(0, 0, 200, 100, mPaint); //画矩形
5) Lukis kawasan lengkok:
canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher), 0, 0, mPaint);
Jika benar ditukar kepada palsu:
6) Lukiskan segi empat tepat bulat
canvas.drawArc(new RectF(0, 0, 100, 100),0,90,true,mPaint); //绘制弧形区域
7 ) Lukis elips
canvas.drawRoundRect(new RectF(10,10,210,110),15,15,mPaint); //画圆角矩形
8) Lukis poligon:
canvas.drawOval(new RectF(0,0,200,300),mPaint); //画椭圆
9) Lukis teks :
Path path = new Path(); path.moveTo(10, 10); //移动到 坐标10,10 path.lineTo(100, 50); path.lineTo(200,40); path.lineTo(300, 20); path.lineTo(200, 10); path.lineTo(100, 70); path.lineTo(50, 40); path.close(); canvas.drawPath(path,mPaint);
Anda juga boleh melukis perkataan ini di sepanjang Laluan:
canvas.drawText("最喜欢看曹神日狗了~",50,50,mPaint); //绘制文字
10 ) Lukis grafik tersuai:
Kod datang daripada Internet:
Path path = new Path(); path.moveTo(50,50); path.lineTo(100, 100); path.lineTo(200, 200); path.lineTo(300, 300); path.close(); canvas.drawTextOnPath("最喜欢看曹神日狗了~", path, 50, 50, mPaint); //绘制文字
Ringkasan bahagian ini:
Dalam bahagian ini kita membincangkan tiga API lukisan di bawah kelas antara muka android.graphics: Kanvas (kanvas), Paint (berus), Path (path) Terdapat banyak cara untuk belajar, jangan menghafalnya, hanya mencarinya apabila anda memerlukannya Di sini kita mempunyai imej kasar dahulu, di manakah kawalan tersuai? Mari kita masuk ke dalamnya perlahan-lahan~ Okay, itu sahaja, terima kasih~