十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这期内容当中小编将会给大家带来有关怎么在Android中利用ImageView实现一个放大缩小动画,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
专业领域包括网站建设、成都网站制作、商城开发、微信营销、系统平台开发, 与其他网站设计及系统开发公司不同,成都创新互联的整合解决方案结合了帮做网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,为客户提供全网互联网整合方案。1.配置文件直接添加
当直接在布局文件中添加图片的话,可以在自定义View代码中用getDrawable()获取图片资源,然后通过DrawBitmap绘制图片。通过不断绘制图片的位置,达到放大缩小的功能。
第一种情况实在XML布局文件中直接添加的:
public class CoolImageView extends ImageView { private int mLeft = 0; private int mTop = 0; private Handler mHandler; private Bitmap bitmap; private Rect srcRect = new Rect(); private Rect dstRect = new Rect(); private int imgWidth; private int imgHeight; private boolean flag; private boolean istart; public CoolImageView(Context context) { super(context); } public CoolImageView(Context context, AttributeSet attrs) { super(context, attrs); setUp(context, attrs); } public CoolImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setUp(context, attrs); } private void setUp(Context context, AttributeSet attrs) { mHandler = new MoveHandler(); mHandler.sendEmptyMessageDelayed(1, 220L); istart = true; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int width = getWidth(); int height = getHeight(); //获取图片资源 BitmapDrawable drawable = (BitmapDrawable) getDrawable(); bitmap = drawable.getBitmap(); dstRect.left = 0; dstRect.top = 0; dstRect.right = width; dstRect.bottom = height; if (bitmap != null) { if (istart) { // 获取图片的宽高 imgWidth = bitmap.getWidth(); imgHeight = bitmap.getHeight(); srcRect.left = 0 + mLeft; srcRect.right = imgWidth - mLeft; srcRect.top = 0 + mTop; srcRect.bottom = imgHeight - mTop; canvas.drawBitmap(bitmap, srcRect, dstRect, null); } else { canvas.drawBitmap(bitmap, null, dstRect, null); } } } private class MoveHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case 1: if (imgHeight != 0) { if (mTop == 0) { mTop += 5; mLeft += 5; } else if (mTop == 120) { mTop -= 5; mLeft -= 5; } } postInvalidate(); mHandler.sendEmptyMessageDelayed(1, 250); break; } } } public void start() { mTop = 0; mLeft = 0; istart = true; mHandler.sendEmptyMessageDelayed(1, 220L); } public void stop() { istart = false; } }