將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); }
新聞熱點
疑難解答