|
在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"
/> |
|