您的位置:首页 > 其它

ClipDrawable的用法(图片切割效果)

2015-01-22 13:52 239 查看
android:clipOrientation有两个属性,默认为horizontal
android:gravity有两个属性,默认为left
ClipDrawable代表从其它位图上截取一个“图片片段”。在XML文件中使用<clip.../>元素定义ClipDrawable对象,可指定如下三个属性:

android:drawable:指定截取的源Drawable对象
android:clipOrientation:指定截取的方向,可设置为水平截取或垂直截取
android:gravity:指定截取时的对齐方式

android:clipOrientation 和android:gravity 是相对应的例如:
当我们用vertical的时候gravity的属性可以设置为top 或bottom 这样图片就可以从顶部向下展开或者从底部向上展开
同样horizontal的时候 gravity的属性可以设置为left或right这样图片就可以从左向右展开或者从又向左展开
但是值得注意的是android:clipOrientation 的属性为horizontal的时候
grivaty的属性top和bottom 是失效的不会从上向下展开也不会从下向上展开会默认从中间向两边展开
同样android:clipOrientation 的属性为vertical的时候
grivaty的属性left和right也是这样的

上代码

自定义drawable 设置ClipDrawable属性 引用一张你想要切割的图片

<? xml version ="1.0" encoding= "utf-8" ?>

< clip xmlns:android ="http://schemas.android.com/apk/res/android"

    android:clipOrientation ="horizontal"

    android:drawable ="@drawable/clip_pic"

    android:gravity ="right" >

</ clip>

界面布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    tools:context=".MainActivity"
4000
>

    <ImageView

        android:id="@+id/view"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:src="@drawable/clip" />

</LinearLayout>

代码实现

[align=left]  private ImageView view ;[/align]
[align=left]
[/align]
[align=left]       @Override[/align]
       protected void onCreate(Bundle savedInstanceState)
{
             // TODO Auto-generated
method stub
[align=left]             super .onCreate(savedInstanceState );[/align]
[align=left]            setContentView(R.layout. activity_main );[/align]
             view =
(ImageView)findViewById(R.id. view);
[align=left]             // 获取图片所显示的ClipDrawable对象[/align]
             final ClipDrawable drawable =
(ClipDrawable) view .getDrawable();
             final Handler handler = new Handle r()
{

[align=left]                   @Override[/align]
                   public void handleMessage(Message msg)
{
[align=left]                         // 如果消息是本程序发送的[/align]
                         if (msg .what ==
0x123) {
[align=left]                               // 修改ClipDrawable的level值[/align]
                               drawable .setLevel(drawable .getLevel()
+ 200);
[align=left]                        }[/align]
[align=left]                  }[/align]
[align=left]            };[/align]
[align=left]             final Timer timer = new Timer();[/align]
             timer .schedule( new TimerTask()
{
[align=left]                   @Override[/align]
                   public void run()
{
[align=left]                        Message msg = new Message();[/align]
                         msg .what =
0x123;
[align=left]                         // 发送消息,通知应用修改ClipDrawable的level的值[/align]
[align=left]                         handler .sendMessage(msg );[/align]
[align=left]                         // 取消定时器[/align]
                         if (drawable .getLevel()
>= 10000) {
                               timer .cancel();
[align=left]                        }[/align]
[align=left]                  }[/align]
[align=left]            }, 0, 300);[/align]
[align=left]      }[/align]

预期效果(从右向左)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: