当前位置: 移动技术网 > IT编程>移动开发>Android > Android入门之画图详解

Android入门之画图详解

2019年07月24日  | 移动技术网IT编程  | 我要评论

传奇私服开服一条龙,右下眼皮跳是怎么回事,金华烟草电子商务网

前文常用的控件介绍了不少,现在就来讨论一下手机开发中常用到的画图。要掌握android的画图,首先就要了解一下,基本用到的如下一些图形接口:

1.bitmap,可以来自资源/文件,也可以在程序中创建,实际上的功能相当于图片的存储空间;

2.canvas,紧密与bitmap联系,把bitmap比喻内容的话,那么canvas就是提供了众多方法操作bitamp的平台;

3.paint,与canvas紧密联系,是"画板"上的笔刷工具,也用于设置view控件上的样式;

4.drawable,如果说前三者是看不见地在内存中画图,那么drawable就是把前三者绘图结果表现出来的接口。drawable多个子类,例如:位图(bitmapdrawable)、图形(shapedrawable)、图层(layerdrawable)等。

本文主要讲解如何在imageview画图,以及如何直接在button(继承view的控件)上面绘制自定义图像。如下图所示:

直接把资源图片画出来:

 

在imageview上画图以及绘字:

直接在控件背景上画图:

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="显示并绘画资源图片"></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);//打开资源图片
  bitmap bmp=bitmapfactory.decoderesource(r, r.drawable.icon);//打开资源图片
  iv.setimagebitmap(bmp);
  }
  else if(v==btn2)//显示并绘画资源图片
  {
     bitmap bmp=bitmapfactory.decoderesource(r, r.drawable.icon);//只读,不能直接在bmp上画
     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("写字。。。",50,50,p);
     canvastemp.drawbitmap(bmp, 50, 50, p);//画图
     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("写字。。。", 30, 30, p);
  drawable drawable = new bitmapdrawable(newb);
  btn3.setbackgrounddrawable(drawable);
  }
 }
 }
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网