Android入門(mén)之畫(huà)圖詳解
前文常用的控件介紹了不少,現(xiàn)在就來(lái)討論一下手機(jī)開(kāi)發(fā)中常用到的畫(huà)圖。要掌握Android的畫(huà)圖,首先就要了解一下,基本用到的如下一些圖形接口:
1.Bitmap,可以來(lái)自資源/文件,也可以在程序中創(chuàng)建,實(shí)際上的功能相當(dāng)于圖片的存儲(chǔ)空間;
2.Canvas,緊密與Bitmap聯(lián)系,把Bitmap比喻內(nèi)容的話(huà),那么Canvas就是提供了眾多方法操作Bitamp的平臺(tái);
3.Paint,與Canvas緊密聯(lián)系,是"畫(huà)板"上的筆刷工具,也用于設(shè)置View控件上的樣式;
4.Drawable,如果說(shuō)前三者是看不見(jiàn)地在內(nèi)存中畫(huà)圖,那么Drawable就是把前三者繪圖結(jié)果表現(xiàn)出來(lái)的接口。Drawable多個(gè)子類(lèi),例如:位圖(BitmapDrawable)、圖形(ShapeDrawable)、圖層(LayerDrawable)等。
本文主要講解如何在ImageView畫(huà)圖,以及如何直接在Button(繼承View的控件)上面繪制自定義圖像。如下圖所示:

直接把資源圖片畫(huà)出來(lái):
在ImageView上畫(huà)圖以及繪字:

直接在控件背景上畫(huà)圖:
main.xml的源碼如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/Button01" android:layout_width="fill_parent" android:layout_height="44px" android:text="顯示資源圖片"></Button> <Button android:id="@+id/Button02" android:layout_width="fill_parent" android:layout_height="44px" android:text="顯示并繪畫(huà)資源圖片"></Button> <Button android:id="@+id/Button03" android:layout_height="44px" android:layout_width="fill_parent" android:text="在控件上繪圖"></Button> <ImageView android:id="@+id/ImageView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView> </LinearLayout>
Java程序的源碼如下:
package com.testDraw;
import android.app.Activity;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class testDraw extends Activity {
ImageView iv;
Button btn1,btn2,btn3,btn4;
Resources r;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
iv=(ImageView)this.findViewById(R.id.ImageView01);
btn1=(Button)this.findViewById(R.id.Button01);
btn2=(Button)this.findViewById(R.id.Button02);
btn3=(Button)this.findViewById(R.id.Button03);
btn1.setOnClickListener(new ClickEvent());
btn2.setOnClickListener(new ClickEvent());
btn3.setOnClickListener(new ClickEvent());
r = this.getResources();
}
class ClickEvent implements View.OnClickListener {
public void onClick(View v) {
if(v==btn1)//顯示資源圖片
{//功能等效
//iv.setBackgroundResource(R.drawable.icon);//打開(kāi)資源圖片
Bitmap bmp=BitmapFactory.decodeResource(r, R.drawable.icon);//打開(kāi)資源圖片
iv.setImageBitmap(bmp);
}
else if(v==btn2)//顯示并繪畫(huà)資源圖片
{
Bitmap bmp=BitmapFactory.decodeResource(r, R.drawable.icon);//只讀,不能直接在bmp上畫(huà)
Bitmap newb = Bitmap.createBitmap( 300, 300, Config.ARGB_8888 );
Canvas canvasTemp = new Canvas( newb );
canvasTemp.drawColor(Color.TRANSPARENT);
Paint p = new Paint();
String familyName ="宋體";
Typeface font = Typeface.create(familyName,Typeface.BOLD);
p.setColor(Color.RED);
p.setTypeface(font);
p.setTextSize(22);
canvasTemp.drawText("寫(xiě)字。。。",50,50,p);
canvasTemp.drawBitmap(bmp, 50, 50, p);//畫(huà)圖
iv.setImageBitmap(newb);
}
else if(v==btn3)//直接在Button上繪圖
{
Bitmap newb = Bitmap.createBitmap( btn3.getWidth(), btn3.getHeight(), Config.ARGB_8888 );
Canvas canvasTemp = new Canvas( newb );
canvasTemp.drawColor(Color.WHITE);
Paint p = new Paint();
String familyName = "宋體";
Typeface font = Typeface.create(familyName, Typeface.BOLD);
p.setColor(Color.RED);
p.setTypeface(font);
p.setTextSize(20);
canvasTemp.drawText("寫(xiě)字。。。", 30, 30, p);
Drawable drawable = new BitmapDrawable(newb);
btn3.setBackgroundDrawable(drawable);
}
}
}
}
- Android實(shí)現(xiàn)簡(jiǎn)單畫(huà)圖畫(huà)板
- Android 自定義view之畫(huà)圖板實(shí)現(xiàn)方法
- Android畫(huà)圖之抗鋸齒paint和Canvas兩種方式實(shí)例
- Android canvas畫(huà)圖操作之切割畫(huà)布實(shí)現(xiàn)方法(clipRect)
- Android簡(jiǎn)單實(shí)現(xiàn)畫(huà)圖功能
- Android編程畫(huà)圖之抗鋸齒解決方法
- Android畫(huà)圖并保存圖片的具體實(shí)現(xiàn)代碼
- Android?Studio實(shí)現(xiàn)簡(jiǎn)單繪圖板
相關(guān)文章
Android開(kāi)發(fā)之開(kāi)關(guān)按鈕用法示例
這篇文章主要介紹了Android開(kāi)發(fā)之開(kāi)關(guān)按鈕用法,結(jié)合實(shí)例形式分析了Android開(kāi)關(guān)按鈕的具體實(shí)現(xiàn)、布局與功能設(shè)置相關(guān)操作技巧,需要的朋友可以參考下2019-04-04
Android NestedScrolling嵌套滾動(dòng)的示例代碼
這篇文章主要介紹了Android NestedScrolling嵌套滾動(dòng)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
Android 6.0指紋識(shí)別App開(kāi)發(fā)案例
這篇文章主要為大家詳細(xì)介紹了Android 6.0 指紋識(shí)別App開(kāi)發(fā)案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
android ListView和ProgressBar(進(jìn)度條控件)的使用方法
這篇文章主要介紹了android ListView控件的使用方法和ProgressBar(進(jìn)度條控件)的使用方法,代碼大家可以參考使用2013-11-11
Android studio 引用aar 進(jìn)行java開(kāi)發(fā)的操作步驟
這篇文章主要介紹了Android studio 引用aar 進(jìn)行java開(kāi)發(fā)的操作步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09
Android獲取網(wǎng)絡(luò)圖片并顯示的方法
這篇文章主要為大家詳細(xì)介紹了Android獲取網(wǎng)絡(luò)圖片并顯示的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
解決Android應(yīng)用冷啟動(dòng)時(shí)出現(xiàn)的白屏問(wèn)題的方法
本篇文章主要介紹了解決Android應(yīng)用冷啟動(dòng)時(shí)出現(xiàn)的白屏問(wèn)題的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08

