Android --小功能 Android中幾種影象特效處理 (一)
這一節給大家分享的是Android中幾種影象特效處理的小技巧,比如圓角,倒影,還有就是圖片縮放,Drawable轉化為Bitmap,Bitmap轉化為Drawable等等.
廢話少說了,直接講解今天的例項,本例主要是先獲取桌布(getWallpaper()),然後對當前桌布的一些特效處理.大家按步驟一步一步來:
第一步:新建一個Android工程命名為ImageDemo,工程結構如下:
第二步:新建一個.java檔案,命名為ImageUtil.java,在裡面定義一些圖片處理方法,程式碼如下:
view plaincopy to clipboardprint? package com.android.tutor; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Bitmap.Config; import android.graphics.PorterDuff.Mode; import android.graphics.Shader.TileMode; import android.graphics.drawable.Drawable; public class ImageUtil { //放大縮小圖片 public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){ int width = bitmap.getWidth(); int height = bitmap.getHeight(); Matrix matrix = new Matrix(); float scaleWidht = ((float)w / width); float scaleHeight = ((float)h / height); matrix.postScale(scaleWidht, scaleHeight); Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); return newbmp; } //將Drawable轉化為Bitmap public static Bitmap drawableToBitmap(Drawable drawable){ int width = drawable.getIntrinsicWidth(); int height = drawable.getIntrinsicHeight(); Bitmap bitmap = Bitmap.createBitmap(width, height, drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0,0,width,height); drawable.draw(canvas); return bitmap; } //獲得圓角圖片的方法 public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){ Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap .getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 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(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; } //獲得帶倒影的圖片方法 public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){ final int reflectionGap = 4; int width = bitmap.getWidth(); int height = bitmap.getHeight(); Matrix matrix = new Matrix(); matrix.preScale(1, -1); Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, height/2, width, height/2, matrix, false); Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height/2), Config.ARGB_8888); Canvas canvas = new Canvas(bitmapWithReflection); canvas.drawBitmap(bitmap, 0, 0, null); Paint deafalutPaint = new Paint(); canvas.drawRect(0, height,width,height + reflectionGap, deafalutPaint); canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null); Paint paint = new Paint(); LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0, bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP); paint.setShader(shader); // Set the Transfer mode to be porter duff and destination in paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); // Draw a rectangle using the paint with our linear gradient canvas.drawRect(0, height, width, bitmapWithReflection.getHeight() + reflectionGap, paint); return bitmapWithReflection; } } package com.android.tutor; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Bitmap.Config; import android.graphics.PorterDuff.Mode; import android.graphics.Shader.TileMode; import android.graphics.drawable.Drawable; public class ImageUtil { //放大縮小圖片 public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){ int width = bitmap.getWidth(); int height = bitmap.getHeight(); Matrix matrix = new Matrix(); float scaleWidht = ((float)w / width); float scaleHeight = ((float)h / height); matrix.postScale(scaleWidht, scaleHeight); Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); return newbmp; } //將Drawable轉化為Bitmap public static Bitmap drawableToBitmap(Drawable drawable){ int width = drawable.getIntrinsicWidth(); int height = drawable.getIntrinsicHeight(); Bitmap bitmap = Bitmap.createBitmap(width, height, drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0,0,width,height); drawable.draw(canvas); return bitmap; } //獲得圓角圖片的方法 public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){ Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap .getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 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(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; } //獲得帶倒影的圖片方法 public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){ final int reflectionGap = 4; int width = bitmap.getWidth(); int height = bitmap.getHeight(); Matrix matrix = new Matrix(); matrix.preScale(1, -1); Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, height/2, width, height/2, matrix, false); Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height/2), Config.ARGB_8888); Canvas canvas = new Canvas(bitmapWithReflection); canvas.drawBitmap(bitmap, 0, 0, null); Paint deafalutPaint = new Paint(); canvas.drawRect(0, height,width,height + reflectionGap, deafalutPaint); canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null); Paint paint = new Paint(); LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0, bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP); paint.setShader(shader); // Set the Transfer mode to be porter duff and destination in paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); // Draw a rectangle using the paint with our linear gradient canvas.drawRect(0, height, width, bitmapWithReflection.getHeight() + reflectionGap, paint); return bitmapWithReflection; } }
第三步:修改main.xml佈局檔案,主要放了兩個ImageView控制元件,程式碼如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/image01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10px" /> <ImageView android:id="@+id/image02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10px" /> </LinearLayout> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/image01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10px" /> <ImageView android:id="@+id/image02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10px" /> </LinearLayout>
第四步:修改主核心程式,ImageDemo.java,程式碼如下:
package com.android.tutor; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.widget.ImageView; public class Imagedemo extends Activity { private ImageView mImageView01,mImageView02; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setupViews(); } private void setupViews(){ mImageView01 = (ImageView)findViewById(R.id.image01); mImageView02 = (ImageView)findViewById(R.id.image02); //獲取桌布返回值是Drawable Drawable drawable = getWallpaper(); //將Drawable轉化為Bitmap Bitmap bitmap = ImageUtil.drawableToBitmap(drawable); //縮放圖片 Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap, 100, 100); //獲取圓角圖片 Bitmap roundBitmap = ImageUtil.getRoundedCornerBitmap(zoomBitmap, 10.0f); //獲取倒影圖片 Bitmap reflectBitmap = ImageUtil.createReflectionImageWithOrigin(zoomBitmap); //這裡可以讓Bitmap再轉化為Drawable // Drawable roundDrawable = new BitmapDrawable(roundBitmap); // Drawable reflectDrawable = new BitmapDrawable(reflectBitmap); // mImageView01.setBackgroundDrawable(roundDrawable); // mImageView02.setBackgroundDrawable(reflectDrawable); mImageView01.setImageBitmap(roundBitmap); mImageView02.setImageBitmap(reflectBitmap); } }
package com.android.tutor;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.ImageView;
public class Imagedemo extends Activity {
private ImageView mImageView01,mImageView02;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupViews();
}
private void setupViews(){
mImageView01 = (ImageView)findViewById(R.id.image01);
mImageView02 = (ImageView)findViewById(R.id.image02);
//獲取桌布返回值是Drawable
Drawable drawable = getWallpaper();
//將Drawable轉化為Bitmap
Bitmap bitmap = ImageUtil.drawableToBitmap(drawable);
//縮放圖片
Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap, 100, 100);
//獲取圓角圖片
Bitmap roundBitmap = ImageUtil.getRoundedCornerBitmap(zoomBitmap, 10.0f);
//獲取倒影圖片
Bitmap reflectBitmap = ImageUtil.createReflectionImageWithOrigin(zoomBitmap);
//這裡可以讓Bitmap再轉化為Drawable
// Drawable roundDrawable = new BitmapDrawable(roundBitmap);
// Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);
// mImageView01.setBackgroundDrawable(roundDrawable);
// mImageView02.setBackgroundDrawable(reflectDrawable);
mImageView01.setImageBitmap(roundBitmap);
mImageView02.setImageBitmap(reflectBitmap);
}
}
第五步:執行上述工程,檢視效果如下:
相關推薦
Android --小功能 Android中幾種影象特效處理 (一)
這一節給大家分享的是Android中幾種影象特效處理的小技巧,比如圓角,倒影,還有就是圖片縮放,Drawable轉化為Bitmap,Bitmap轉化為Drawable等等. 廢話少說了,直接講解今天的例項,本例主要是先獲取桌布(getWallpaper()),然後對當前
Android中幾種影象特效處理
Android中有很多圖片特效處理技巧,比如圓角、倒影,今天為大家分享一個例項,本例主要是先獲取桌布(getWallpaper()),然後對當前桌布的一些特效處理。 第一步:新建一個Android工程命名為ImageDemo,工程結構如下: 第二步:新建
Android開發案例:Android中幾種影象特效處理
· · Android中有很多圖片特效處理技巧,比如圓角、倒影,今天為大家分享一個例項,本例主要是先獲取桌布(getWallpaper()),然後對當前桌布的一些特效處理。 第一步:新建一個Android工程命名為ImageDemo,工程
技術轉載:Android高手進階教程(二十二)之---Android中幾種影象特效處理的集錦!! .
這一節給大家分享的是Android中幾種影象特效處理的小技巧,比如圓角,倒影,還有就是圖片縮放,Drawable轉化為Bitmap,Bitmap轉化為Drawable等等. 廢話少說了,直接講解今天的例項,本例主要是先獲取桌布(getWallpaper()),然後對當前
Android高手進階教程之---Android中幾種影象特效處理的集錦!!
大家好,這一節給大家分享的是Android中幾種影象特效處理的小技巧,比如圓角,倒影,還有就是圖片縮放,Drawable轉化為Bitmap,Bitmap轉化為Drawable等等. 廢話少說了,直接講解今天的例項,本例主要是先獲取桌布(getWallpaper()),然後對
Android中幾種影象特效處理的集錦!!
大家好,這一節給大家分享的是Android中幾種影象特效處理的小技巧,比如圓角,倒影,還有就是圖片縮放,Drawable轉化為Bitmap,Bitmap轉化為Drawable等等. 廢話少說了,直接講解今天的例項,本例主要是先獲取桌布(getWallpaper()),然後對當前桌布的一些特效處理
android 筆記 --- Android中幾種影象特效處理的集錦
Android中幾種影象特效處理的小技巧,比如圓角,倒影,還有就是圖片縮放,Drawable轉化為Bitmap,Bitmap轉化為Drawable等等.廢話少說了,直接講解今天的例項,本例主要是先獲取桌布(getWallpaper()),然後對當前桌布的一些特效處理.大家按步
Android中幾種影象特效處理的集錦!!!
大家好,這一節給大家分享的是Android中幾種影象特效處理的小技巧,比如圓角,倒影,還有就是圖片縮放,Drawable轉化為Bitmap,Bitmap轉化為Drawable等等. 廢話少說了,直接講解今天的例項,本例主要是先獲取桌布(getWallpaper()),然後對當
Matplotlib中幾種常用的圖形(四)
條形圖 條形圖常常用來描述一組資料的對比情況,例如:一週七天,每天的城市車流量等。【條形圖有兩個引數x,y】bar()繪製豎直條形圖、barh()繪製水平條形圖。 匯入繪圖工具包: import matplotlib.pyplot as plt imp
Android 圖解逆向工程中ARM常用匯編指令(一)
我們走得太快,靈魂都跟不上了。 微小的幸福就在身邊,容易滿足就是天堂。 在逆向和爆破中我們經常會在IDA中接觸到彙編,一般做安卓的不會太瞭解VB回編等,不太瞭解的同學可以先檢視上篇文章《Android ARM常用的彙編指令合集》 再來繼續我們
spring中幾個主要的類(一)InitializingBean介面
spring中幾個重要的類(一)InitializingBean介面 專案中管理事務比較簡單,用TransactionTemplate,就直接以TransactionTemplate為入口開始學習。 TransactionTemplate的原始碼如下: public class TransactionTem
聊聊高併發(六)實現幾種自旋鎖(一)
在聊聊高併發(五)理解快取一致性協議以及對併發程式設計的影響 我們瞭解了處理器快取一致性協議的原理,並且提到了它對併發程式設計的影響,“多個執行緒對同一個變數一直使用CAS操作,那麼會有大量修改操作,從而產生大量的快取一致性流量,因為每一次CAS操作都會發出廣播通知其他處理
Tensorflow常見問題處理 TensorFlow 影象預處理(一) 影象編解碼,影象尺寸調整 tensorflow(一):圖片處理 TensorFlow 處理圖片
1、Tensorflow中影象處理函式(影象大小調整) Tensorflow中影象處理函式(影象大小調整) tensorflow入門之---------影象大小調整 TensorFlow 影象預處理(一) 影象編解碼,影象尺寸調整 Tensorflow針對不定尺寸的圖片讀寫tfreco
Android中幾種延後處理事件的方法
一、Handler和TimerTask相結合 1、首先定義TimerTask TimerTask task = new TimerTask(){ public void run() { Message message = new Message()
適合小白用的css幾種睡在中間(居中)的方式!!!
HTML css css3. javascript 初學者 平常小白最討厭的事情就是css為什麽沒有辦法居中,現在小狐貍為大家整理幾種方式,請廣大人民群眾笑納!!! 吐舌頭 1水平居中1.1 內聯元素水平居中利用 text-align: center 可以實現在塊級元素內部的內聯元素水平居
UML中類之間的幾種關係,關聯(association),聚合(Aggregation),組合(Composition)
類之間可能存在以下幾種關係:關聯(association)、依賴(dependency)、聚合(Aggregation,也有的稱聚集)、組合(Composition)、泛化(generalization,也有的稱繼承)、實現(Realization)。 關聯是指兩個類之間存在某種特定的對應關係,例如客戶和訂
python 中幾種字串的處理
1、list轉string字串 使用''.join(list) 例: listA=['我'.'是','Python','菜鳥'] str = ''.join(listA)
Android Studio中配置及使用OpenCV示例(一)
Android Studio配置及使用OpenCV前言:最近在做專案移植,專案較大,在Eclipse中配置的Jni及OpenCV環境沒任何問題,但是遷移到Studio中就問題一大堆,網上也找了一些資料參考及學習,很感謝前人留下的總結及經驗。關於在AS中使用jni及配置Open
angularjs2 中幾種常用的型別(String,Number)等
let a:Number=1;//數值型別 let b:String = 'angularjs2';//字元型別 let c:boolean = true; //布林型別 let d:Number [
C#中幾種常用的處理字串的方法總結
主要有以下幾種: string[i]所獲得的元素是隻讀的。 string.ToCharArray() (把string獲得一個可寫的字元陣列) string.Replace(old, new)(將字串中指定字元或者子字串做相應的替換) string.ToLower