当前位置: 移动技术网 > IT编程>移动开发>Android > Android自定义ImageView实现在图片上添加图层效果

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

5320主题,车祸图片大全,鹿晗 消防员

首先我们先看下效果图

实现思路

这是两张前后对比图,右边第二张图里面的已抢光标签图片当已经没有商品的时候就会显示了,在每个图片的中心位置,第一想法是在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的上面新加一个图层。

总结

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网