Android仿微信圖片編輯庫,你想要的功能這里都有


最近項目需要,寫了一個和微信中圖片編輯功能類似的圖片編輯庫,除去問題操作上擯棄掉不方便的手勢操作外,其余微信中的核心功能全部一致,保留了微信中塗鴉、馬賽克、文字等隨時隨着圖片縮放的功能,這點是我所找的庫都不提供的功能,也是我從零去完成這個圖片編輯庫的原因。

Github地址:https://github.com/kareluo/Imaging

圖片編輯功能預覽

功能說明

這里針對其中的幾個主要功能點進行一些簡要說明,如果大家想要詳細了解可以查看Demo代碼,已經類庫的源碼。

1、塗鴉功能

塗鴉的路徑是使用Path對象記錄手勢路徑,

switch(event.getActionMasked()) {
    case MotionEvent.ACTION_DOWN:
        path.reset();
        path.moveTo(event.getX(), event.getY());
        break;
    case MotionEvent.ACTION_MOVE:
        path.lineTo(event.getX(), event.getY());
        break;
    case MotionEvent.ACTION_UP:
        // 添加到Path列表中
        break;  
}

然后繪制到Canvas對象上,並給畫筆設定Width和Color。

2、馬賽克功能

馬賽克的路徑部分和塗鴉相同,這里不用多說,主要是馬賽克如何生成,一個很簡單的辦法就是先把整張圖進行縮小,然后將其放大至現有大小繪制出時,其就會很模糊,但是這個模糊不是馬賽克效果,這時只需要為其指定一個Paint,並將Paint對象的filterBitmap設置為false即可。然后在和路徑合成便成立馬賽克筆觸。

// 保存圖層
paint.setFilterBitmap(false);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
// 繪制路徑
// 繪制馬賽克全圖
// 恢復圖層

3、文字功能

文字功能相比塗鴉和馬賽克來說其實難很多,這里使用的方式和微信的略有不同,如下:

文字貼圖

文字的縮放、旋轉和刪除都不是使用手勢方式,而是使用按鈕,這種方式比手勢的易用性高很多。

這里每個文字貼圖都是一個子控件,相對於這個圖片編輯的底圖來說,底圖其實是一個ViewGroup,這個子控件在ViewGroup里面旋轉縮放,擺放位置等。具體實現這里不說了,三言兩語很難說清。

4、裁剪與旋轉

當時旋轉是最后做的,旋轉的加入讓整個項目陷入崩潰邊緣,所有操作都強行加入了選擇這個后來者,頭大,裁剪相對還不算問題,主要是動畫的問題比較多,因為要做到和微信極度接近,裁剪和旋轉動畫的效果也是基本還原微信效果。

當裁剪出某個區域后並不會將Bitmap對象進行裁剪,而是調整顯示區域使其模擬出裁剪的效果,以備還原到原圖,如下:

// 裁剪區域
canvas.clipRect(mClipWin.isClipping() ? mFrame : mClipFrame);

后記

目前這個類庫剛完成全部核心功能,很多細節還在不斷完善中。

Github地址:https://github.com/kareluo/Imaging


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com