ClipDrawable代表从其它位图上截取一个”图片片段”,XML中的根元素为<clip…/>,截取的方向由clipOrientation控制
下面以一个慢慢展开的图片为例
ClipDrawable代表从其它位图上截取一个“图片片段”。在XML文件中使用<clip…/>元素定义ClipDrawable对象,可指定如下三个属性:
android:drawable:指定截取的源Drawable对象
android:clipOrientation:指定截取的方向,可设置为水平截取或垂直截取
android:gravity:指定截取时的对齐方式
使用ClipDrawable对象时可以调用setLevel(int level)方法来设置截取的区域大小,当level为0时,截取的图片片段为空;当level为10000时,截取整张图片。
通过以上说明,我们发现,可以使用ClipDrawable的这种性质控制截取图片的区域大小,让程序不断调用setLevel方法并改变level的值,达到让图片慢慢展开的效果。
1.先定义一个ClipDrawable资源文件drawable_clip.xml 效果是从中间向两边展开
<?xml version="1.0" encoding="utf-8"?><clip xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/test" android:clipOrientation="horizontal" android:gravity="center"></clip>
2.在主Activity的布局文件中添加ImageView ,名称activity_mian
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- 这里imageView的src定义为clipdrawable资源 --> <ImageView android:id="@+id/image" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/drawable_clip" /></LinearLayout>
3.0 主Activity代码 MainActivity
package com.wuzhou.clipdrawabletest;import android.graphics.drawable.ClipDrawable;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ImageView;import java.util.Timer;import java.util.TimerTask;public class MainActivity extends AppCompatActivity { private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView) findViewById(R.id.image); //获取图片所显示的ClipDrawble对象 final ClipDrawable clipdrawable = (ClipDrawable) imageView.getDrawable(); /** * Handler * */ final Handler handler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 0x1233) { //修改ClipDrawable的level值 clipdrawable.setLevel(clipdrawable.getLevel() + 200); } } }; /** * 计时器 * */ final Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { Message msg = new Message(); msg.what = 0x1233; //发送消息,通知应用修改ClipDrawable对象的level值 handler.sendMessage(msg); //取消定时器 if (clipdrawable.getLevel() >= 10000) { timer.cancel(); } } }, 0, 300); }}
4.0 如果在布局activity_main中图片的显示方式是
android:background="@drawable/drawable_clip"
则
//获取图片所显示的ClipDrawble对象 final ClipDrawable clipdrawable = (ClipDrawable) imageView.getBackground();
这种方式。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/119237.html