赞
踩
打算根据 @卢俊 写的 音视频开发入门指南 写一个系列博客,这是第一篇,也是文章 音视频开发入门指南 任务列表中的第一个。
ImageView 绘制图片就很简单了,无论是 xml 还是 Java 代码,都只需要设置一个属性即可。但我们可以看看 ImageView 的源码实现,来学习一下 ImageView 绘制图片的流程。
直接看 onDraw() 即可:
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (mDrawable == null) { return; // couldn't resolve the URI } if (mDrawableWidth == 0 || mDrawableHeight == 0) { return; // nothing to draw (empty bounds) } // 不需要变换坐标,直接绘制即可 if (mDrawMatrix == null && mPaddingTop == 0 && mPaddingLeft == 0) { mDrawable.draw(canvas); } else { final int saveCount = canvas.getSaveCount(); canvas.save(); // 保存 canvas // 坐标变换 if (mCropToPadding) { final int scrollX = mScrollX; final int scrollY = mScrollY; canvas.clipRect(scrollX + mPaddingLeft, scrollY + mPaddingTop, scrollX + mRight - mLeft - mPaddingRight, scrollY + mBottom - mTop - mPaddingBottom); } canvas.translate(mPaddingLeft, mPaddingTop); if (mDrawMatrix != null) { canvas.concat(mDrawMatrix); } // 绘制图片 mDrawable.draw(canvas); // 恢复 canvas canvas.restoreToCount(saveCount); } }
ImageView 是绘制图片用的,因此 mDrawable 应该为 BitmapDrawable 类型:
// BitmapDrawable.java @Override public void draw(Canvas canvas) { final Bitmap bitmap = mBitmapState.mBitmap; if (bitmap == null) { return; } ... if (shader == null) { if (needMirroring) { canvas.save(); // Mirror the bitmap canvas.translate(mDstRect.right - mDstRect.left, 0); canvas.scale(-1.0f, 1.0f); } canvas.drawBitmap(bitmap, null, mDstRect, paint); if (needMirroring) {
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。