Android ClipDrawable 应用

ClipDrawable 对应于标签<clip>,它可以根据当前的等级<level>来裁剪一个Drawable,裁剪的方向可以通过android:clipOrientation和android:gravity来共同控制,android:clipOrientation表示裁剪方向,有竖直、水平方向,常常用于满圆的进度条。

准备两张图片

       命名为full_classroom_img 、free_classroom_img



drawable 文件夹下

  <clip xmlns:android="http://schemas.android.com/apk/res/android"   
    android:drawable="@drawable/full_classroom_img"   
    android:clipOrientation="vertical"   
    android:gravity="bottom">   
 </clip> 


布局文件

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    <ImageView 
        android:id="@+id/empty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/free_classroom_img"
        />
  <ImageView 
        android:id="@+id/full"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/clip"
        />
</FrameLayout>


自定义控件

public class MyPercentImage extends FrameLayout {


private ClipDrawable drawable;
public MyPercentImage(Context context) {
super(context);
init(context);
}
public MyPercentImage(Context context, AttributeSet attrs) {    
  super(context, attrs);  
  init(context);
}
private void init(Context context)
{
LayoutInflater.from(context).inflate(R.layout.my_progress_bar, this, true);
ImageView image = (ImageView) findViewById(R.id.full);
drawable = (ClipDrawable)image.getDrawable();  
drawable.setLevel(5000); 
}
public void setLevel(float level)
{
drawable.setLevel((int)(level*10000)); 
}
}


MainActivity



 public class MainActivity extends Activity {
MyPercentImage clip;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
clip = (MyPercentImage) findViewById(R.id.clip);
clip.setLevel(0.3f);
}
}



效果图




Drawable的等级(level)是有范围的,即 0~10000,最小等级是0,最大等级是10000,对于ClipDrawable来说,等级0表示完全裁剪,即整个Drawable不可见,等级10000表示不裁剪,上面写的0.3F*10000就是3000,表示30%

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值