将asset中的图片文件加载到ImageView中
// load image try { // get input stream InputStream ims = getAssets().open("avatar.jpg"); // load image as Drawable Drawable d = Drawable.createFromStream(ims, null); // set image to ImageView mImage.setImageDrawable(d); } catch(IOException ex) { return; }将asset中的图片文件绘制到自定义View中。
Bitmap bitmap; try { InputStream ims = this.getContext().getAssets().open("fl.jpg"); // 读入图片并将其强转为 BitmapDrawable类型 BitmapDrawable bd = (BitmapDrawable) Drawable.createFromStream(ims, null); bitmap = bd.getBitmap(); ims.close(); } catch(IOException ex) { return; } //canvas.drawBitmap(bitmap, -200, -200, new Paint()); canvas.drawBitmap(bitmap, null, new Rect(-30,-40,30,40), new Paint());//null表示原图尺寸,第二个rect表示显示区域(位图会拉伸填充该区域)在onDraw()中绘制位图需要用到的方法(源码):
/** * Draw the specified bitmap, scaling/translating automatically to fill * the destination rectangle. If the source rectangle is not null, it * specifies the subset of the bitmap to draw. * * <p>Note: if the paint contains a maskfilter that generates a mask which * extends beyond the bitmap's original width/height (e.g. BlurMaskFilter), * then the bitmap will be drawn as if it were in a Shader with CLAMP mode. * Thus the color outside of the original width/height will be the edge * color replicated. * * <p>This function <em>ignores the density associated with the bitmap</em>. * This is because the source and destination rectangle coordinate * spaces are in their respective densities, so must already have the * apPRopriate scaling factor applied. * * @param bitmap The bitmap to be drawn * @param src May be null. The subset of the bitmap to be drawn * @param dst The rectangle that the bitmap will be scaled/translated * to fit into * @param paint May be null. The paint used to draw the bitmap */ public void drawBitmap(@NonNull Bitmap bitmap, @Nullable Rect src, @NonNull RectF dst, @Nullable Paint paint) { if (dst == null) { throw new NullPointerException(); } throwIfCannotDraw(bitmap); final long nativePaint = paint == null ? 0 : paint.getNativeInstance(); float left, top, right, bottom; if (src == null) { left = top = 0; right = bitmap.getWidth(); bottom = bitmap.getHeight(); } else { left = src.left; right = src.right; top = src.top; bottom = src.bottom; } native_drawBitmap(mNativeCanvasWrapper, bitmap, left, top, right, bottom, dst.left, dst.top, dst.right, dst.bottom, nativePaint, mScreenDensity, bitmap.mDensity); }
新闻热点
疑难解答