極力推薦文章:歡迎收藏
Android 干貨分享
本篇文章主要介紹 Android 開(kāi)發(fā)中的部分知識(shí)點(diǎn),通過(guò)閱讀本篇文章,您將收獲以下內(nèi)容:
一、ImageView 的繼承關(guān)系一、ImageView 的繼承關(guān)系
二、ImageView 常用方法
三、ImageView 背景 間距屬性設(shè)置
四、使用Bitmap 類(lèi)型動(dòng)態(tài)設(shè)置ImageView 資源
五、ImageView 圖片倒影實(shí)現(xiàn)
六、ImageView 圖片縮放實(shí)現(xiàn)
七、ImageView 圓角圖片實(shí)現(xiàn)
八、Bitmap 與Drawable 轉(zhuǎn)換工具類(lèi)
ImageView 的繼承關(guān)系 如下:
java.lang.Object ?? ?? android.view.View ? ??? ? android.widget.ImageView二、ImageView 常用方法
ImageView 主要用于顯示圖像資源,Bitmap 或Drawable資源,同時(shí)也常用于圖片渲染調(diào)色,圖片縮放剪裁等。
以下XML代碼段是使用ImageView顯示圖像資源的常見(jiàn)示例:
在xml 使用ImageView 控件
三、 ImageView 背景 間距屬性設(shè)置
在xml 使用ImageView 控件
實(shí)現(xiàn)效果如下:
四、 使用Bitmap 類(lèi)型動(dòng)態(tài)設(shè)置ImageView 資源在xml 使用ImageView 控件
2.java 類(lèi)實(shí)現(xiàn)
// 1.從資源中獲取Bitmap ImageView mImageView1 = (ImageView) findViewById(R.id.img_1); DrawableUtils.UseBitmap(this, mImageView1, R.drawable.gril);
3.DrawableUtils 類(lèi)方法實(shí)現(xiàn)
// 1.從資源中獲取Bitmap public static void UseBitmap(Context context, ImageView imageView, int drawableId) { Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), drawableId); imageView.setImageBitmap(bitmap); }
實(shí)現(xiàn)效果如下:
五、ImageView 圖片倒影實(shí)現(xiàn)在xml 使用ImageView 控件
java 代碼 實(shí)現(xiàn)效果
// 4.倒影圖片 ImageView mImageView4 = (ImageView) findViewById(R.id.img_4); mImageView4.setImageBitmap(DrawableUtils.CreateReflectionImageWithOrigin( DrawableUtils.DrawableToBitmap(getResources().getDrawable( R.drawable.img1))));
DrawableUtils 工具類(lèi)的方法實(shí)現(xiàn)
// 5. Drawable----> Bitmap public static Bitmap DrawableToBitmap(Drawable drawable) { // 獲取 drawable 長(zhǎng)寬 int width = drawable.getIntrinsicWidth(); int heigh = drawable.getIntrinsicHeight(); drawable.setBounds(0, 0, width, heigh); // 獲取drawable的顏色格式 Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565; // 創(chuàng)建bitmap Bitmap bitmap = Bitmap.createBitmap(width, heigh, config); // 創(chuàng)建bitmap畫(huà)布 Canvas canvas = new Canvas(bitmap); // 將drawable 內(nèi)容畫(huà)到畫(huà)布中 drawable.draw(canvas); return bitmap; }
實(shí)現(xiàn)效果如下:
六、ImageView 圖片縮放實(shí)現(xiàn)在xml 使用ImageView 控件
java 代碼 實(shí)現(xiàn)效果
// 2. 圖片縮放 ImageView mImageView2 = (ImageView) findViewById(R.id.img_2); mImageView2.setImageDrawable(DrawableUtils.ZoomDrawable(getResources().getDrawable(R.drawable.img1), 240, 200));
DrawableUtils 工具類(lèi)方法實(shí)現(xiàn)
// 9. drawable進(jìn)行縮放 ---> bitmap 然后比對(duì)bitmap進(jìn)行縮放 public static Drawable ZoomDrawable(Drawable drawable, int w, int h) { int width = drawable.getIntrinsicWidth(); int height = drawable.getIntrinsicHeight(); // 調(diào)用5 中 drawable轉(zhuǎn)換成bitmap Bitmap oldbmp = DrawableToBitmap(drawable); // 創(chuàng)建操作圖片用的Matrix對(duì)象 Matrix matrix = new Matrix(); // 計(jì)算縮放比例 float sx = ((float) w / width); float sy = ((float) h / height); // 設(shè)置縮放比例 matrix.postScale(sx, sy); // 建立新的bitmap,其內(nèi)容是對(duì)原bitmap的縮放后的圖 Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height, matrix, true); return new BitmapDrawable(newbmp); }
實(shí)現(xiàn)效果如下:
七、ImageView 圓角圖片 實(shí)現(xiàn)在xml 使用ImageView 控件
2. java 代碼 實(shí)現(xiàn)效果
// 3. 圓角圖片 ImageView mImageView3 = (ImageView) findViewById(R.id.img_3); mImageView3.setImageBitmap(DrawableUtils.SetRoundCornerBitmap( DrawableUtils.DrawableToBitmap(getResources().getDrawable( R.drawable.img1)), 60));
DrawableUtils 工具類(lèi)方法實(shí)現(xiàn)
// 6.圓角圖片 public static Bitmap SetRoundCornerBitmap(Bitmap bitmap, float roundPx) { int width = bitmap.getWidth(); int heigh = bitmap.getHeight(); // 創(chuàng)建輸出bitmap對(duì)象 Bitmap outmap = Bitmap.createBitmap(width, heigh, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(outmap); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, width, heigh); final RectF rectf = new RectF(rect); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectf, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return outmap; }
實(shí)現(xiàn)效果如下:
八、Bitmap 與Drawable 轉(zhuǎn)換工具類(lèi)Bitmap 與Drawable 轉(zhuǎn)換常用工具類(lèi)源代碼如下:
package com.programandroid.Utils; import java.io.ByteArrayOutputStream; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Shader; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.widget.ImageView; /* * DrawableUtils.java * * Created on: 2017-10-24 * Author: wangjie * * Welcome attention to weixin public number get more info * * WeiXin Public Number : ProgramAndroid * 微信公眾號(hào) :程序員Android * */ public class DrawableUtils { // 1.從資源中獲取Bitmap public static void UseBitmap(Context context, ImageView imageView, int drawableId) { Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), drawableId); imageView.setImageBitmap(bitmap); } // 2.Bitmap ---> byte[] public byte[] BitmapToBytes(Bitmap bitmap) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); return baos.toByteArray(); } // 3.byte[] ---->bitmap public Bitmap BytesToBitmap(byte[] b) { if (b.length != 0) { return BitmapFactory.decodeByteArray(b, 0, b.length); } else { return null; } } // 4.Bitmap 縮放方法 public static Bitmap ZoomBitmap(Bitmap bitmap, int width, int heigh) { int w = bitmap.getWidth(); int h = bitmap.getHeight(); Matrix matrix = new Matrix(); float scalewidth = (float) width / w; float scaleheigh = (float) heigh / h; matrix.postScale(scalewidth, scaleheigh); Bitmap newBmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true); return newBmp; } // 5. Drawable----> Bitmap public static Bitmap DrawableToBitmap(Drawable drawable) { // 獲取 drawable 長(zhǎng)寬 int width = drawable.getIntrinsicWidth(); int heigh = drawable.getIntrinsicHeight(); drawable.setBounds(0, 0, width, heigh); // 獲取drawable的顏色格式 Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565; // 創(chuàng)建bitmap Bitmap bitmap = Bitmap.createBitmap(width, heigh, config); // 創(chuàng)建bitmap畫(huà)布 Canvas canvas = new Canvas(bitmap); // 將drawable 內(nèi)容畫(huà)到畫(huà)布中 drawable.draw(canvas); return bitmap; } // 6.圓角圖片 public static Bitmap SetRoundCornerBitmap(Bitmap bitmap, float roundPx) { int width = bitmap.getWidth(); int heigh = bitmap.getHeight(); // 創(chuàng)建輸出bitmap對(duì)象 Bitmap outmap = Bitmap.createBitmap(width, heigh, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(outmap); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, width, heigh); final RectF rectf = new RectF(rect); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectf, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return outmap; } // 7.獲取帶倒影的圖片 public static Bitmap CreateReflectionImageWithOrigin(Bitmap bitmap) { final int reflectionGapLine = 4; int w = bitmap.getWidth(); int h = bitmap.getHeight(); Matrix matrix = new Matrix(); matrix.preScale(1, -1); Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, h / 2, w, h / 2, matrix, false); Bitmap bitmapWithReflection = Bitmap.createBitmap(w, (h + h / 2), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmapWithReflection); canvas.drawBitmap(bitmap, 0, 0, null); Paint deafalutPaint = new Paint(); canvas.drawRect(0, h, w, h + reflectionGapLine, deafalutPaint); canvas.drawBitmap(reflectionImage, 0, h + reflectionGapLine, null); Paint paint = new Paint(); LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0, bitmapWithReflection.getHeight() + reflectionGapLine, 0x70ffffff, 0x00ffffff, Shader.TileMode.CLAMP); paint.setShader(shader); // Set the Transfer mode to be porter duff and destination in paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); // Draw a rectangle using the paint with our linear gradient canvas.drawRect(0, h, w, bitmapWithReflection.getHeight() + reflectionGapLine, paint); return bitmapWithReflection; } // 8. bitmap ---Drawable public static Drawable BitmapToDrawable(Bitmap bitmap, Context context) { BitmapDrawable drawbale = new BitmapDrawable(context.getResources(), bitmap); return drawbale; } // 9. drawable進(jìn)行縮放 ---> bitmap 然后比對(duì)bitmap進(jìn)行縮放 public static Drawable ZoomDrawable(Drawable drawable, int w, int h) { int width = drawable.getIntrinsicWidth(); int height = drawable.getIntrinsicHeight(); // 調(diào)用5 中 drawable轉(zhuǎn)換成bitmap Bitmap oldbmp = DrawableToBitmap(drawable); // 創(chuàng)建操作圖片用的Matrix對(duì)象 Matrix matrix = new Matrix(); // 計(jì)算縮放比例 float sx = ((float) w / width); float sy = ((float) h / height); // 設(shè)置縮放比例 matrix.postScale(sx, sy); // 建立新的bitmap,其內(nèi)容是對(duì)原bitmap的縮放后的圖 Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height, matrix, true); return new BitmapDrawable(newbmp); } }
至此,本篇已結(jié)束,如有不對(duì)的地方,歡迎您的建議與指正。同時(shí)期待您的關(guān)注,感謝您的閱讀,謝謝!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/75851.html
摘要:簡(jiǎn)介繼承關(guān)系如下主要使用方法主要通過(guò)使用自定義來(lái)適配數(shù)據(jù),進(jìn)而顯示到中。如果不是太明白,可以查看上篇文章使用詳解至此,本篇已結(jié)束,如有不對(duì)的地方,歡迎您的建議與指正。同時(shí)期待您的關(guān)注,感謝您的閱讀,謝謝 極力推薦文章:歡迎收藏Android 干貨分享 showImg(https://segmentfault.com/img/remote/1460000019975020); 閱讀五分...
摘要:原文首發(fā)于微信公眾號(hào),歡迎關(guān)注交流中緩存的使用比較普遍,使用相應(yīng)的緩存策略可以減少流量的消耗,也可以在一定程度上提高應(yīng)用的性能,如加載網(wǎng)絡(luò)圖片的情況,不應(yīng)該每次都從網(wǎng)絡(luò)上加載圖片,應(yīng)該將其緩存到內(nèi)存和磁盤(pán)中,下次直接從內(nèi)存或磁盤(pán)中獲取,緩 原文首發(fā)于微信公眾號(hào):jzman-blog,歡迎關(guān)注交流! Android 中緩存的使用比較普遍,使用相應(yīng)的緩存策略可以減少流量的消耗,也可以在一定...
閱讀 2676·2023-04-25 18:10
閱讀 1617·2019-08-30 15:53
閱讀 2811·2019-08-30 13:10
閱讀 3228·2019-08-29 18:40
閱讀 1134·2019-08-23 18:31
閱讀 1209·2019-08-23 16:49
閱讀 3408·2019-08-23 16:07
閱讀 883·2019-08-23 15:27