您的位置:首页 > 移动开发 > Android开发

「一句话经典」Android绘制View(view私人定制的必修课)

2017-02-09 16:45 218 查看
「一句话经典」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 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: