Android編程中圖片特效處理方法小結(jié)
本文實例總結(jié)了Android編程中圖片特效處理方法。分享給大家供大家參考,具體如下:
這里介紹的Android圖片處理方法包括:
轉(zhuǎn)換 - drawable To bitmap
縮放 - Zoom
圓角 - Round Corner
倒影 - Reflected
bitmapPrcess code:
package com.learn.games;
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 bitmapProcess {
// zoom
public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h){
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
float scaleWidth = w/(float)width;
float scaleHeight = h/(float)height;
matrix.postScale(scaleWidth, scaleHeight);
Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
return bitmap2;
}
// drawable to bitmap
public static Bitmap drawable2Bitmap(Drawable drawable){
int width = drawable.getIntrinsicHeight();
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;
}
// Round Corner Bitmap
public static Bitmap getRoundCornerBitmap(Bitmap bitmap, float roundPX){
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Bitmap bitmap2 = Bitmap.createBitmap(width, height, Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap2);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, width, height);
final RectF rectF = new RectF(rect);
paint.setColor(color);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
canvas.drawRoundRect(rectF, roundPX, roundPX, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return bitmap2;
}
// Reflect Bitmap
public static Bitmap createReflectedBitmap(Bitmap bitmap){
final int reflectedGap = 4;
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.preScale(1, -1);
Bitmap reflectedImage = Bitmap.createBitmap(bitmap, 0, height/2, width, height/2, matrix, false);
Bitmap reflectedBitmap = Bitmap.createBitmap(width, (height + height/2), Config.ARGB_8888);
Canvas canvas = new Canvas(reflectedBitmap);
canvas.drawBitmap(bitmap, 0, 0, null);
Paint defaultPaint = new Paint();
canvas.drawRect(0, height, width, height + reflectedGap, defaultPaint);
canvas.drawBitmap(reflectedImage, 0, height + reflectedGap, null);
Paint paint = new Paint();
LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0,
reflectedBitmap.getHeight() + reflectedGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP);
paint.setShader(shader);
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
canvas.drawRect(0, height, width, reflectedBitmap.getHeight() + reflectedGap, paint);
return reflectedBitmap;
}
}
Java Code:
package com.learn.games;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.ImageView;
public class MyBitmapProcessActivity extends Activity {
private ImageView imgView1;
private ImageView imgView2;
private ImageView imgView3;
private ImageView imgView4;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
drawBitmap();
}
private void drawBitmap(){
imgView1 = (ImageView)findViewById(R.id.imgView1);
imgView2 = (ImageView)findViewById(R.id.imgView2);
imgView3 = (ImageView)findViewById(R.id.imgView3);
imgView4 = (ImageView)findViewById(R.id.imgView4);
Drawable drawable = this.getWallpaper();
Bitmap bitmap = bitmapProcess.drawable2Bitmap(drawable); // drawable to bitmap
Bitmap zoomBitmap = bitmapProcess.zoomBitmap(bitmap, 100, 100); // zoom
Bitmap roundBitmap = bitmapProcess.getRoundCornerBitmap(zoomBitmap, 10.0f); // round corner
Bitmap reflectedBitmap = bitmapProcess.createReflectedBitmap(zoomBitmap); // reflect bitmap
// drawable to bitmap
imgView1.setImageBitmap(bitmap);
imgView2.setImageBitmap(zoomBitmap);
imgView3.setImageBitmap(roundBitmap);
imgView4.setImageBitmap(reflectedBitmap);
// bitmap to drawable
Drawable roundDrawable = new BitmapDrawable(roundBitmap);
Drawable reflectedDrawable = new BitmapDrawable(reflectedBitmap);
imgView1.setBackgroundDrawable(roundDrawable);
imgView2.setBackgroundDrawable(reflectedDrawable);
}
}
XML:
<?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/imgView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView android:id="@+id/imgView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView android:id="@+id/imgView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView android:id="@+id/imgView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
效果圖:
drawable2bitmap

zoom

round corner

reflected bitmap

希望本文所述對大家Android程序設(shè)計有所幫助。
相關(guān)文章
Android ViewPager實現(xiàn)選項卡切換
這篇文章主要介紹了Android ViewPager實現(xiàn)選項卡切換,詳細分析了ViewPager實現(xiàn)選項卡切換功能,感興趣的小伙伴們可以參考一下2016-02-02
Android UI系列-----ScrollView和HorizontalScrollView的詳解
本篇文章主要是介紹的Android UI系列-----ScrollView和HorizontalScrollView,ScrollView和HorizontalScrollView都是布局容器,有需要的可以了解一下。2016-11-11
Android?TextView跑馬燈實現(xiàn)原理及方法實例
字的跑馬燈效果在移動端開發(fā)中是一個比較常見的需求場景,下面這篇文章主要給大家介紹了關(guān)于Android?TextView跑馬燈實現(xiàn)原理及方法的相關(guān)資料,需要的朋友可以參考下2022-05-05
Android開發(fā)學(xué)習(xí)實現(xiàn)簡單計算器
這篇文章主要為大家詳細介紹了Android實現(xiàn)一個簡單計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-04-04
android bitmap compress(圖片壓縮)代碼
android bitmap compress(圖片壓縮)代碼,需要的朋友可以參考一下2013-06-06
AndroidStudio上傳本地項目到碼云的方法步驟(OSChina)
這篇文章主要介紹了AndroidStudio上傳本地項目到碼云的方法步驟(OSChina),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04
說說在Android如何使用服務(wù)(Service)的方法
這篇文章主要介紹了說說在Android如何使用服務(wù)(Service)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06
Android使用ViewPager快速切換Fragment時卡頓的優(yōu)化方案
今天小編就為大家分享一篇關(guān)于Android使用ViewPager快速切換Fragment時卡頓的優(yōu)化方案,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12

