Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 710|回复: 0

[实例教程]Android Bitmap和Canvas实例

[复制链接]

该用户从未签到

发表于 2011-10-22 12:24:09 | 显示全部楼层 |阅读模式
Android UI开发中我们讲到的东西主要是基础和理论内容,从本次eoeAndroid将通过实例代码来演示,本次主要是Bitmap和Canvas类的使用,根据要求缩放Bitmap对象并返回新的Bitmap对象。centerToFit方法一共有4个参数,返回一个Bitmap类型,第一个参数为原 始的位图对象,width和height分别为新的宽和高,而Context是用来加载资源的上下文实例。

java代码: Bitmap centerToFit(Bitmap bitmap, int width, int height, Context context) {

final int bitmapWidth = bitmap.getWidth();

//获取原始bitmap的宽度

final int bitmapHeight = bitmap.getHeight();



if (bitmapWidth < width || bitmapHeight < height) {

int color = context.getResources().getColor(R.color.window_background);

//从资源读取背景色

Bitmap centered = Bitmap.createBitmap(bitmapWidth < width ? width : bitmapWidth,

bitmapHeight < height ? height : bitmapHeight, Bitmap.Config.RGB_565);

centered.setDensity(bitmap.getDensity());

Canvas canvas =new Canvas(centered);

canvas.drawColor(color);

//先绘制背景色

canvas.drawBitmap(bitmap, (width - bitmapWidth) /2.0f, (height - bitmapHeight) /2.0f,null);

//通过Canvas绘制Bitmap

bitmap = centered;

}

return bitmap; //返回新的bitmap

}
本段代码从Android2.1开始将会应用在全新的Home主屏上,同时相关的ImageView的适应屏幕大小的setScaleType(fitCenter) 方法类似,仅仅是我们制定了未来的大小。GraphableButton类实现Android UI开发从Android1.6开始,系统设置中的电池使用记录提供了一种简单的自绘Button按钮演示-GraphableButton类,通过GraphableButton我们可以很清晰的了解到前几次eoeAndroid讲到的UI开发要点。

java代码: public class GraphableButton extends Button { //从Button类继承

private static final String TAG ="GraphableButton";

static Paint[] sPaint =new Paint[2]; //定义两种颜色

static {

sPaint[0] =new Paint();

sPaint[0].setStyle(Paint.Style.FILL);

sPaint[0].setColor(0xFF0080FF);

sPaint[1] =new Paint();

sPaint[1].setStyle(Paint.Style.FILL);

sPaint[1].setColor(0xFFFF6060);

}

double[] mValues;

public GraphableButton(Context context, AttributeSet attrs) {

super(context, attrs);

}
java代码: public void setValues(double[] values, double maxValue) { //设置显示范围,下文提到

mValues = values.clone();





for (int i =0; i < values.length; i++) {

mValues/= maxValue;

}

}





@Override

public void onDraw(Canvas canvas) { //重写onDraw直接绘制

Log.i(TAG, "onDraw: w = "+ getWidth() +", h = "+ getHeight());

int xmin = getPaddingLeft();

int xmax = getWidth() - getPaddingRight();

int ymin = getPaddingTop();

int ymax = getHeight() - getPaddingBottom();

int startx = xmin;





for (int i =0; i < mValues.length; i++) {

int endx = xmin + (int) (mValues * (xmax - xmin));

canvas.drawRect(startx, ymin, endx, ymax, sPaint); //通过canvas绘制范围

// 该方法原型 drawRect(float left, float top, float right, float bottom, Paint paint)

startx = endx;

}

super.onDraw(canvas);

}





}
调用方法很简单,和普通的Button没有什么区别,这里我们仅仅多定义了setValues方法,安卓巴士提醒巴友注意布局文件xml中如何定义,在最下文

java代码: private GraphableButton mButtons;

mButtons = (GraphableButton) findViewById(R.id.button0);

mButtons.setOnClickListener(this); //设置一个按下事件监听

mButtons.setVisibility(View.INVISIBLE); //设置当前按钮不可见

mButtons.setText("android123.com欢迎您");

mButtons.setValues(0,100);

mButtons.setVisibility(View.VISIBLE); //设置按钮可见
下面在layout.xml中如何写呢,这里要写上自己程序完整的package name才能正确被adt识别,相关的具体定义如下:

java代码: android:id="@+id/button7"

android:layout_width="fill_parent"

android:layout_height="0dp"

android:layout_marginLeft="4dp"

android:layout_marginRight="4dp"

android:layout_marginBottom="4dp"

android:layout_weight="1"

/>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-12-23 05:18 , Processed in 0.350594 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表