博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用ClipDrawable实现ImageView展开收缩
阅读量:6950 次
发布时间:2019-06-27

本文共 2795 字,大约阅读时间需要 9 分钟。

hot3.png

#效果演示

#实现 ##自定义控件ImageViewProgressively

public class ImageViewProgressively extends ImageView{	Context mContext;		//图片展开或收缩方向,默认为horizontal;	private int orientation_progress = 1;	//图片展开形式,默认从top到bottom	private int expend_type = 0x30;	//递增或递减的幅度(level的范围在0-10000),可以为负数	private int level_change_step = 1000;	//为了使动画效果明显,设置延迟修改的时间间隔,默认为50ms	private int level_change_delayed = 50;			public ImageViewProgressively(Context context) {		super(context);		mContext = context;		// TODO Auto-generated constructor stub			}		public ImageViewProgressively(Context context, AttributeSet attrs) {		super(context, attrs);		mContext = context;				TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.ImageViewProgressively);		orientation_progress = array.getInt(R.styleable.ImageViewProgressively_orientation_progress, 1);		expend_type = array.getInt(R.styleable.ImageViewProgressively_expend_type, 0x30);		level_change_step = array.getInt(R.styleable.ImageViewProgressively_level_change_step, 1000);		level_change_delayed = array.getInt(R.styleable.ImageViewProgressively_level_change_delayed, 50);				Drawable d = this.getDrawable();        if (d != null) {            setImageDrawable(d);        }        array.recycle();	}	@Override	public void setImageDrawable(Drawable drawable) {		// TODO Auto-generated method stub		ClipDrawable mClipDrawable = new ClipDrawable(drawable, expend_type, orientation_progress);		super.setImageDrawable(mClipDrawable);		if(level_change_step > 0){			mClipDrawable.setLevel(0);		}else{			mClipDrawable.setLevel(10000);		}				this.post(animateImage);	}		@Override	public void setImageBitmap(Bitmap bm) {		// TODO Auto-generated method stub		setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));	}		private Runnable animateImage = new Runnable() {				@Override		public void run() {			doTheAnimation(getDrawable());		}	};	    private void doTheAnimation(Drawable mDrawable){    	mDrawable.setLevel(mDrawable.getLevel() + level_change_step);    	if (mDrawable.getLevel() <= 10000 && mDrawable.getLevel() >=0) {			this.postDelayed(animateImage, level_change_delayed);		}else {			this.removeCallbacks(animateImage);		}    }}

##attr定义

##用法

实现效果比较简单,。 这个是以前见到有些网页上出现这种效果,不知道是因为图片数据没下载完整,可以一部分一部分的显示,还是特意做的这种效果,想实现部分图片数据逐步加载显示(一张1m的图片,只下载0.5m的数据,显示图片的一部分),一直还没成功。

转载于:https://my.oschina.net/u/1051338/blog/538507

你可能感兴趣的文章
文件夹权限
查看>>
【翻译】Siesta事件记录器入门
查看>>
将Ext JS 5应用程序导入Web项目以及实现本地化
查看>>
HTML5开发手机项目—个人总结
查看>>
《完整部署 OCS-NG》
查看>>
codeforces 812B. Sagheer, the Hausmeister
查看>>
第24周SDAI缓解能否预测远期RA骨破坏受抑制
查看>>
Away3D 的实体收集器Bug
查看>>
对于新旧技术的争论,我很low的想法
查看>>
Zabbix2.4.X_监控SNMP
查看>>
VirtualBox是什么
查看>>
linux定时任务Crond之服务器同步时间05
查看>>
需求改进与系统设计
查看>>
jquery特效 商品SKU属性规格选择实时联动
查看>>
HashMap[转]
查看>>
面向对象程序设计——总结作业
查看>>
linux之 sed命令
查看>>
oracle rac的特征
查看>>
Linux之 find之 ctime,atime,mtime
查看>>
mysql查询
查看>>