「一句话经典」Android绘制View(view私人定制的必修课):使用Paint、Bitmap、Canvas 以及其他在android.graphic 包下的常用类,如Color 、Matrix 、Drawable、Shape着色器类生产出新Bitmap图,然后被ImageView使用。
经典解读:
1 、(难点)绘图逻辑与人类绘画不一致:人类是使用画笔在画布/纸上绘画;但是android提供的绘图逻辑是画布使用画笔画画。
2 、(需掌握)绘图逻辑全流程:输入:Bitmap(初始可为空) 、paint(包含颜色与粗细大小等属性)、Canvas(拿着paint画);输出 :Bitmap
3、开始画起
布局文件
<?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:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="center"
tools:context="com.crazy.caz.basisofdrawview.MainActivity">
<ImageView
android:id="@+id/imageView"
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_gravity="center"
android:background="@mipmap/ic_launcher"/>
</LinearLayout>
活动类MainActivity
package com.crazy.caz.basisofdrawview;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView= (ImageView) findViewById(R.id.imageView);
imageView.setImageBitmap(getBitmap());
}
private Bitmap getBitmap() {
//1. 创建 Bitmap
int width=300;
int height=300;
Bitmap bm=Bitmap.createBitmap(width,height, Bitmap.Config.ARGB_8888);
//2. 创建Canvas
Canvas canvas=new Canvas(bm);
//3.创建用于绘制矩形的Paint
Paint rectPaint=new Paint();
rectPaint.setColor(Color.YELLOW);
//4. 绘制矩形
canvas.drawRect(0,0,width,height,rectPaint);
//5.创建新的paint用于绘制文字"2017"
Paint textPaint=new Paint();
textPaint.setColor(Color.BLUE);
textPaint.setTextSize(100);
textPaint.setTypeface(
Typeface.defaultFromStyle(
Typeface.BOLD_ITALIC
)
);
textPaint.setTextAlign(Paint.Align.CENTER);
//6.写字
canvas.drawText("2017",width/2,height/2,textPaint);
//7.
return bm;
}
}
最终效果
附DEMO下载链接: http://download.csdn.net/detail/z00238082/9751090