欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android自定义ImageView实现在图片上添加图层效果

程序员文章站 2024-03-02 13:39:40
首先我们先看下效果图 实现思路 这是两张前后对比图,右边第二张图里面的已抢光标签图片当已经没有商品的时候就会显示了,在每个图片的中心位置,第一想法是在imagevi...

首先我们先看下效果图

Android自定义ImageView实现在图片上添加图层效果

实现思路

这是两张前后对比图,右边第二张图里面的已抢光标签图片当已经没有商品的时候就会显示了,在每个图片的中心位置,第一想法是在imageview的外层再套一层relativelayout

实现方法

<relativelayout  
 android:layout_width="match_parent" 
 android:layout_height="wrap_content"> 
<selectableroundedimageview    
 android:id="@+id/imageview"    
 style="@style/margin_distance"    
 android:layout_width="match_parent"    
 android:layout_height="0dp"    
 android:layout_weight="1"    
 android:background="@drawable/youxuan_bg_shape_normol"    
 android:contentdescription="@string/app_name"    
 android:padding="1dp"    
 android:scaletype="centercrop" />  
<imageview    
 android:id="@+id/iv_empty_pic"    
 android:layout_width="wrap_content"    
 android:layout_height="wrap_content"    
 android:layout_centerinparent="true" />
</relativelayout>

这样当然是可以的,然而如果xml布局本身就很复杂,用这样的写法又给view tree加了一层,不够优雅,下面介绍另一种实现方式:自定义view

public class centerimage extends imageview {  
private paint paint;  
private boolean iscenterimgshow;  
private bitmap bitmap;  
public void setcenterimgshow(boolean centerimgshow) {    
  iscenterimgshow = centerimgshow;    
  if (iscenterimgshow) {      
  bitmap = bitmapfactory.decoderesource(getresources(), r.mipmap.ic_launcher);      
  invalidate();    
  }  
 }  
 public centerimage(context context) {    
  super(context);    
  init();  
 }  
public centerimage(context context, attributeset attrs) {    
  super(context, attrs);    
  init();  
 }  
public centerimage(context context, attributeset attrs, int defstyleattr) {    
  super(context, attrs, defstyleattr);    
  init();  
 }  
private void init() {    
  paint = new paint();  
 }  
@override  
protected void ondraw(canvas canvas) {    
 super.ondraw(canvas);    
 if (iscenterimgshow && bitmap != null) {      
 canvas.drawbitmap(bitmap, getmeasuredwidth() / 2 - bitmap.getwidth() / 2, getmeasuredheight() / 2 - bitmap.getheight() / 2, paint);    
 }  
 }
}

xml中:

<com.henanjianye.soon.communityo2o.view.centerimage   
  android:id="@+id/goodsimage"   
  android:layout_width="match_parent"  
  android:layout_height="100dp"  
  android:layout_alignparentend="true"  
  android:layout_alignparentright="true"  
  android:contentdescription="@string/app_name"  
  android:scaletype="centercrop"  
  android:src="@mipmap/yijia_default_bg" />

代码中拿到centerimage的对象:

centerimage mgoodsimg =(centerimage)findviewbyid(r.id.goodsimage);
mgoodsimg.setcenterimgshow(true);

setcenterimgshow()里的invalidate()方法被调用后,centerimage的ondraw()方法会重新被调用并重新绘制,这样就可以愉快地在imageview的上面新加一个图层。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。