Android ClipDrawable 应用

来源:互联网 发布:3m易清洁涂层 知乎 编辑:程序博客网 时间:2024/06/05 16:10

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
原创粉丝点击