Android高手進階教程(二十二)之—Android中幾種映像特效處理的集錦!!

來源:互聯網
上載者:User

大家好,這一節給大家分享的是Android中幾種映像特效處理的小技巧,比如圓角,倒影,還有就是圖片縮放,Drawable轉化為Bitmap,Bitmap轉化為Drawable等等.

廢話少說了,直接講解今天的執行個體,本例主要是先擷取壁紙(getWallpaper()),然後對當前壁紙的一些特效處理.大家按步驟一步一步來:

第一步:建立一個Android工程命名為ImageDemo,工程結構如下:

第二步:建立一個.java檔案,命名為ImageUtil.java,在裡面定義一些圖片處理方法,代碼如下:

package com.android.tutor;<br />import android.graphics.Bitmap;<br />import android.graphics.Canvas;<br />import android.graphics.LinearGradient;<br />import android.graphics.Matrix;<br />import android.graphics.Paint;<br />import android.graphics.PixelFormat;<br />import android.graphics.PorterDuffXfermode;<br />import android.graphics.Rect;<br />import android.graphics.RectF;<br />import android.graphics.Bitmap.Config;<br />import android.graphics.PorterDuff.Mode;<br />import android.graphics.Shader.TileMode;<br />import android.graphics.drawable.Drawable;<br />public class ImageUtil {</p><p>//放大縮小圖片<br />public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){<br />int width = bitmap.getWidth();<br />int height = bitmap.getHeight();<br />Matrix matrix = new Matrix();<br />float scaleWidht = ((float)w / width);<br /> float scaleHeight = ((float)h / height);<br /> matrix.postScale(scaleWidht, scaleHeight);<br /> Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);<br />return newbmp;<br />}<br />//將Drawable轉化為Bitmap<br /> public static Bitmap drawableToBitmap(Drawable drawable){<br /> int width = drawable.getIntrinsicWidth();<br /> int height = drawable.getIntrinsicHeight();<br /> Bitmap bitmap = Bitmap.createBitmap(width, height,<br /> drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888<br /> : Bitmap.Config.RGB_565);<br /> Canvas canvas = new Canvas(bitmap);<br /> drawable.setBounds(0,0,width,height);<br /> drawable.draw(canvas);<br /> return bitmap;</p><p> }</p><p> //獲得圓角圖片的方法<br />public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){</p><p>Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap<br />.getHeight(), Config.ARGB_8888);<br />Canvas canvas = new Canvas(output);</p><p>final int color = 0xff424242;<br />final Paint paint = new Paint();<br />final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());<br />final RectF rectF = new RectF(rect);</p><p>paint.setAntiAlias(true);<br />canvas.drawARGB(0, 0, 0, 0);<br />paint.setColor(color);<br />canvas.drawRoundRect(rectF, roundPx, roundPx, paint);</p><p>paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));<br />canvas.drawBitmap(bitmap, rect, rect, paint);</p><p>return output;<br />}<br />//獲得帶倒影的圖片方法<br />public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){<br />final int reflectionGap = 4;<br />int width = bitmap.getWidth();<br />int height = bitmap.getHeight();</p><p>Matrix matrix = new Matrix();<br />matrix.preScale(1, -1);</p><p>Bitmap reflectionImage = Bitmap.createBitmap(bitmap,<br />0, height/2, width, height/2, matrix, false);</p><p>Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height/2), Config.ARGB_8888);</p><p>Canvas canvas = new Canvas(bitmapWithReflection);<br />canvas.drawBitmap(bitmap, 0, 0, null);<br />Paint deafalutPaint = new Paint();<br />canvas.drawRect(0, height,width,height + reflectionGap,<br />deafalutPaint);</p><p>canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);</p><p>Paint paint = new Paint();<br />LinearGradient shader = new LinearGradient(0,<br />bitmap.getHeight(), 0, bitmapWithReflection.getHeight()<br />+ reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP);<br />paint.setShader(shader);<br />// Set the Transfer mode to be porter duff and destination in<br />paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));<br />// Draw a rectangle using the paint with our linear gradient<br />canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()<br />+ reflectionGap, paint);</p><p>return bitmapWithReflection;<br />}</p><p>}<br />

第三步:修改main.xml布局檔案,主要放了兩個ImageView控制項,代碼如下:

<?xml version="1.0" encoding="utf-8"?><br /><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"<br /> android:orientation="vertical"<br /> android:layout_width="fill_parent"<br /> android:layout_height="fill_parent"<br /> ><br /><ImageView<br />android:id="@+id/image01"<br /> android:layout_width="wrap_content"<br /> android:layout_height="wrap_content"<br /> android:padding="10px"<br /> /><br /><ImageView<br />android:id="@+id/image02"<br />android:layout_width="wrap_content"<br /> android:layout_height="wrap_content"<br /> android:padding="10px"<br />/><br /></LinearLayout><br />

第四步:修改主核心程式,ImageDemo.java,代碼如下:

package com.android.tutor;<br />import android.app.Activity;<br />import android.graphics.Bitmap;<br />import android.graphics.drawable.Drawable;<br />import android.os.Bundle;<br />import android.widget.ImageView;<br />public class Imagedemo extends Activity {<br />private ImageView mImageView01,mImageView02;</p><p> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);<br /> setupViews();<br /> }</p><p> private void setupViews(){<br /> mImageView01 = (ImageView)findViewById(R.id.image01);<br /> mImageView02 = (ImageView)findViewById(R.id.image02);</p><p> //擷取壁紙傳回值是Drawable<br /> Drawable drawable = getWallpaper();<br /> //將Drawable轉化為Bitmap<br /> Bitmap bitmap = ImageUtil.drawableToBitmap(drawable);<br /> //縮放圖片<br /> Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap, 100, 100);<br /> //擷取圓角圖片<br /> Bitmap roundBitmap = ImageUtil.getRoundedCornerBitmap(zoomBitmap, 10.0f);<br /> //擷取倒影圖片<br /> Bitmap reflectBitmap = ImageUtil.createReflectionImageWithOrigin(zoomBitmap);<br /> //這裡可以讓Bitmap再轉化為Drawable<br />// Drawable roundDrawable = new BitmapDrawable(roundBitmap);<br />// Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);<br />// mImageView01.setBackgroundDrawable(roundDrawable);<br />// mImageView02.setBackgroundDrawable(reflectDrawable);</p><p> mImageView01.setImageBitmap(roundBitmap);<br /> mImageView02.setImageBitmap(reflectBitmap);<br /> }</p><p>}

第五步:運行上述工程,查看效果如下:

 

OK大功告成了!!

 

本文參考文獻:http://wiki.impjq.net/doku.php?id=code:android-code:image-convert&rev=1275640889&mddo=print

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.