我们在做应用开发时,特别是在做图片浏览器或文件浏览器时,涉及到图片或文件的管理时,我们难免需要批量处理它们,就需要用到多选功能。怎么来在视觉上显示给用户文件时候已经选定了呢,我们可以改变文件名称的字体的颜色来标记,但不是很明显,最好还是在文件或图片图标上显示一个勾以表选中。在android的layout文件里,我们是用一个ImageView控件来显示一张图片,如果需要在图片上显示一个勾,非得在layout文件里实现的话,那就只能用绝对布局了,使两个ImageView重叠起来,此方法显然不可取,其自适应能力很差!
在这里,我们可以使用两种方法来实现:
第一种:使用canvas
public void first(View v) {
// 防止出现Immutable bitmap passed to Canvas constructor错误
Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(),R.drawable.apple).copy(Bitmap.Config.ARGB_8888, true);Bitmap bitmap2 = ((BitmapDrawable) getResources().getDrawable(R.drawable.go)).getBitmap();Bitmap newBitmap = null;
newBitmap = Bitmap.createBitmap(bitmap1);
Canvas canvas = new Canvas(newBitmap);Paint paint = new Paint();int w = bitmap1.getWidth();
int h = bitmap1.getHeight();int w_2 = bitmap2.getWidth();
int h_2 = bitmap2.getHeight();paint.setColor(Color.GRAY);
paint.setAlpha(125);canvas.drawRect(0, 0, bitmap1.getWidth(), bitmap1.getHeight(), paint);paint = new Paint();
canvas.drawBitmap(bitmap2, Math.abs(w – w_2) / 2,Math.abs(h – h_2) / 2, paint);canvas.save(Canvas.ALL_SAVE_FLAG);// 存储新合成的图片canvas.restore();image.setImageBitmap(newBitmap);
}
第二种:使用LayerDrawable,具体代码如下
public void second(View v) {
Bitmap bitmap1 = ((BitmapDrawable) getResources().getDrawable(
R.drawable.apple)).getBitmap();Bitmap bitmap2 = ((BitmapDrawable) getResources().getDrawable(R.drawable.go)).getBitmap();Drawable[] array = new Drawable[2];
array[0] = new BitmapDrawable(bitmap1);array[1] = new BitmapDrawable(bitmap2);LayerDrawable la = new LayerDrawable(array);// 其中第一个参数为层的索引号,后面的四个参数分别为left、top、right和bottomla.setLayerInset(0, 0, 0, 0, 0);la.setLayerInset(1, 20, 20, 20, 20);image.setImageDrawable(la);}