Android下利用Bitmap切割图片
在自己自定义的一个组件中由于需要用图片显示数字编号,而当前图片就只有一张,上面有0-9是个数字,于是不得不考虑将其中一个个的数字切割下来,需要显示什么数字,只需要组合一下就好了。
下面是程序的关键代码:
在MyView(继承于View)类中的重写的onDraw(Canvas canvas)方法中,有如下代码段:
Bitmap resource = BitmapFactory.decodeResource(this.getResources(), R.drawable.num);
Bitmap zero = Bitmap.createBitmap(resource, 0, 0, 12, 12);
Bitmap one = Bitmap.createBitmap(resource, 12, 0, 12, 12);
Bitmap two = Bitmap.createBitmap(resource, 24, 0, 12, 12);
Bitmap three = Bitmap.createBitmap(resource, 36, 0, 12, 12);
Bitmap four = Bitmap.createBitmap(resource, 48, 0, 12, 12);
Bitmap five = Bitmap.createBitmap(resource, 60, 0, 12, 12);
Bitmap six = Bitmap.createBitmap(resource, 72, 0, 12, 12);
Bitmap seven = Bitmap.createBitmap(resource, 84, 0, 12, 12);
Bitmap eight = Bitmap.createBitmap(resource, 96, 0, 12, 12);
Bitmap nine = Bitmap.createBitmap(resource, 108, 0, 12, 12);
其中R.drawable.num为数字图片,每个数字占据的像素为12*12,Bitmap.createBitmap方法中的五个参数意义分别为:需要切割的图片资源、切割起始点的X坐标、切割起始点的Y坐标、切割多宽、切割多高。
切割下来之后就非常简单的就可以显示各种数字了,例如:用String类型的number表示需要显示的数字,则
char nums[] = number.toCharArray();
for(int i = 0; i < nums.length; i ++) {
if(nums[i] == '0') {
canvas.drawBitmap(zero, i * 12, 0, mPaint);
} else if(nums[i] == '1') {
canvas.drawBitmap(one, i * 12, 0, mPaint);
} else if(nums[i] == '2') {
canvas.drawBitmap(two, i * 12, 0, mPaint);
} else if(nums[i] == '3') {
canvas.drawBitmap(three, i * 12, 0, mPaint);
} else if(nums[i] == '4') {
canvas.drawBitmap(four, i * 12, 0, mPaint);
} else if(nums[i] == '5') {
canvas.drawBitmap(five, i * 12, 0, mPaint);
} else if(nums[i] == '6') {
canvas.drawBitmap(six, i * 12, 0, mPaint);
} else if(nums[i] == '7') {
canvas.drawBitmap(seven, i * 12, 0, mPaint);
} else if(nums[i] == '8') {
canvas.drawBitmap(eight, i * 12, 0, mPaint);
} else if(nums[i] == '9') {
canvas.drawBitmap(nine, i * 12, 0, mPaint);
}
}
其中canvas为画布,drawBitmap方法中的四个参数的意义分别为:需要绘制的图片资源、在画布上绘制的起始点的X坐标、Y坐标、画笔。其中画笔在此处可以不进行任何设置,只需new一个出来即可,Paint mPaint = new Paint();
完整代码
NumView
package com.barney;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.DisplayMetrics;
import android.view.View;
public class NumView extends View {
private static Paint mPaint;
private String num;
public NumView(Context context, String num) {
super(context);
this.num = num;
mPaint = new Paint();
}
@Override
public void draw(Canvas canvas) {
super.onDraw(canvas);
int base = 0;
mPaint.setAntiAlias(true);
DisplayMetrics dm = new DisplayMetrics();
dm = getResources().getDisplayMetrics();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inDensity = dm.densityDpi;
Bitmap resource = BitmapFactory.decodeResource(this.getResources(), R.drawable.num, options);
Bitmap zero = Bitmap.createBitmap(resource, 0, 0, 12, 12);
Bitmap one = Bitmap.createBitmap(resource, 12, 0, 12, 12);
Bitmap two = Bitmap.createBitmap(resource, 24, 0, 12, 12);
Bitmap three = Bitmap.createBitmap(resource, 36, 0, 12, 12);
Bitmap four = Bitmap.createBitmap(resource, 48, 0, 12, 12);
Bitmap five = Bitmap.createBitmap(resource, 60, 0, 12, 12);
Bitmap six = Bitmap.createBitmap(resource, 72, 0, 12, 12);
Bitmap seven = Bitmap.createBitmap(resource, 84, 0, 12, 12);
Bitmap eight = Bitmap.createBitmap(resource, 96, 0, 12, 12);
Bitmap nine = Bitmap.createBitmap(resource, 108, 0, 12, 12);
char nums[] = num.toCharArray();
for(int i = 0; i < nums.length; i ++) {
Rect rect = new Rect();
rect.set(base + i * 12, 0, base + i * 12 + 12, 12);
Bitmap bitmap = null;
if(nums[i] == '0') {
bitmap = zero;
} else if(nums[i] == '1') {
bitmap = one;
} else if(nums[i] == '2') {
bitmap = two;
} else if(nums[i] == '3') {
bitmap = three;
} else if(nums[i] == '4') {
bitmap = four;
} else if(nums[i] == '5') {
bitmap = five;
} else if(nums[i] == '6') {
bitmap = six;
} else if(nums[i] == '7') {
bitmap = seven;
} else if(nums[i] == '8') {
bitmap = eight;
} else if(nums[i] == '9') {
bitmap = nine;
}
canvas.drawBitmap(bitmap,null, rect, mPaint);
}
}
}
BitmapDemoActivity
package com.barney;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
public class BitmapDemoActivity extends Activity {
private EditText myEditText;
private Button myButton;
private LinearLayout myLinearLayout;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myButton = (Button) this.findViewById(R.id.myButton);
myEditText = (EditText) this.findViewById(R.id.myEditText);
myLinearLayout = (LinearLayout) this.findViewById(R.id.myLinearLayout);
myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String num = myEditText.getText().toString();
NumView numView = new NumView(BitmapDemoActivity.this, num);
myLinearLayout.removeAllViews();
myLinearLayout.addView(numView);
}
});
}
}
源代码
参考链接
Android下利用Bitmap切割图片 - - ITeye技术网站
效果如下
Android下利用Bitmap切割图片的更多相关文章
- android 下 利用webview实现浏览器功能
android 下 利用webview实现浏览器功能(一): 1.界面添加WEBVIEW控件. 2.在界面.JAVA代码页面(protected void onCreate(Bundle savedI ...
- 浅谈Android下的Bitmap之大Bitmap加载
引言 我们常常提到的“Android程序优化”,通常指的是性能和内存的优化,即:更快的响应速度,更低的内存占用.Android程序的性能和内存问题,大部分都和图片紧密相关,而图片的加载在很多情况下很用 ...
- Android下利用zbar类库实现扫一扫
程序源代码及可执行文件下载地址:http://files.cnblogs.com/rainboy2010/zbardemo.zip Android下常用的条码扫描类库有zxing和zbar,比较了一下 ...
- Android下利用SQLite数据库实现增删改查
1: 首先介绍如何利用adb查看数据库 1: adb shell 2: cd /data/data/包名/databases 3: sqlite3 数据库 4 接下来就可以进行数据库的sql语法 ...
- Android下利用zxing类库实现扫一扫
程序源代码及可执行文件下载地址:http://files.cnblogs.com/rainboy2010/zxingdemo.zip zxing,一款无比强大的条码解析类库,下面讲解一下如何利用zxi ...
- Android下利用RadioGroup和RadioButton实现Tabbar的效果
本实现方法主要使用RadioGroup和RadioButton的组合方式来实现Tabbar的效果. 其中选中的Tab的切换的动作可以通过RadioGroup的OnCheckedChangeListen ...
- Android 调用jepg库进行图片压缩,保持图片不失真
1. 浅谈为什么Android和iOS图片质量差距那么大? 首先来说,作为一个安卓狗,机器当然用的是安卓的手机.现在的安卓手机大多数都会以高清拍照,动不动就几千万柔光相机来吸引各种买家.买来后,拍照发 ...
- Android调用相册拍照控件实现系统控件缩放切割图片
android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家 package cn.m15.test; import java.io.By ...
- Android 调用相册 拍照 实现系统控件缩放 切割图片
android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家. package cn.m15.test; import java.io.B ...
随机推荐
- HDU 2242 考研路茫茫----空调教室
传送门 考研路茫茫——空调教室 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- Laravel 5 中的配置
介绍 Laravel 的所有的配置文件都放在了 config 这个目录的下面.每个选项都有介绍. config├── app.php├── auth.php├── cache.php├── compi ...
- zabbix表结构
zabbix数据库表结构的重要性 想理解zabbix的前端代码.做深入的二次开发,甚至的调优,那就不能不了解数据库的表结构了. 我们这里采用的zabbix1.8.mysql,所以简单的说下我们mysq ...
- Spring学习6-Spring整合Struts2
一.Spring为什么要整合Struts2 Struts2与Spring进行整合的根本目的就是要让 Spring为Struts2的Action注入所需的资源对象,它们整合的原理则是只要导入了s ...
- STL中算法
sort 大数据量时,采用Quick Sort,分段递归排序: 小数据量时,采用Insert Sort. 如果迭代层次过深,会导致快排性能退化,这时采用Heap Sort排序. 快排pivot采用三点 ...
- svn切换用户
问题背景:你用一个用户更新了代码,此时想用另一个用户提交,这就涉及到一个svn切换用户的问题 1. 查看svn 的用户名,密码:找到用户名,密码文件,都是明文的,你可以看到例:linuxhjj@hjj ...
- chown命令
改变一个文件的所有者和组 1.命令格式: chown [选项]... [所有者][:[组]] 文件... 例子: komiles@iUbuntu:~/study/wordpress$ lltotal ...
- 转 Xenserver HVM is required for this operation的解决办法
今天在XenServer中安装虚拟机时出现如下错误: 原因:没有开启XenServer服务器主机的虚拟化支持功能 解决办法:在XenServer主机的BIOS里开启CPU的虚拟化支持功能 本文出自 “ ...
- Session超时处理
1.web.xml 添加配置: <!-- session超时 --> <filter> <filter-name>sessionFilter</filter- ...
- MYSQL例题合集
一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ABS(x) 返回x的绝对值 SELECT ABS(-1) -- 返回1 CEIL(x),CEILING(x) 返回大于或等于x的最小整数 ...