導航:首頁 > 操作系統 > android圓形裁剪框

android圓形裁剪框

發布時間:2023-03-14 22:02:53

android imagecropper怎麼裁圓圖

支持圓形裁剪框,裁剪後生成圓形圖案。
代碼基於開源項目修改,github上項目鏈接:https://github.com/shengge/Android-crop

還是貼下效果圖:

說一下圓形裁剪實現部分:
1.UI方面,自定義CircleHighlightView繼承至HighlightView(原有的矩形裁剪框實現),直接看draw方法實現

[java] view plain
@Override
protected void draw(Canvas canvas) {
canvas.save();
Path path = new Path();
outlinePaint.setStrokeWidth( outlineWidth);
if(!hasFocus()) {//沒焦點是,直接畫一個黑色的矩形框
outlinePaint.setColor( Color.BLACK);
canvas.drawRect( drawRect, outlinePaint);

② Android調用系統的圖片剪裁,剪裁框大小能設置嗎outputX和outputY不是

你的問題我理解的是從一張圖片上。挖取指定坐標的一塊圖片是吧。
看代碼的意思是。你想用參數的方法直接從camera取得。這種方法沒有嘗試過。
這一定得需要camera支持。識別extra里的參數。這樣實際是調用系統的api處理

倒不如你換個方法。把這些圖品剪切的動作放到本地里做。只從照片中取得整張圖片。避免API不支持或版本不支持

③ android 如何把正方形圖片顯示圓形

Android應用開發中,很多頭像都要求顯示成圓形的,這就可以使用android的canvas、paint這些類來進行設置圓形,先設置paint的樣式為圓形,然後把你要設置成圓形的圖片重新賦值給paint這個類:canvas.drawBitmap(tempBmp, rect, rect, paint);

核心代碼如下(引用這位前輩:http://blog.sina.com.cn/s/blog_7607703f0101dhlj.html,我增加一些注釋,原來是沒有注釋):

packagecom.liang.round;
importandroid.annotation.SuppressLint;
importandroid.content.Context;
importandroid.graphics.Bitmap;
importandroid.graphics.Bitmap.Config;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Canvas;
importandroid.graphics.Paint;
importandroid.graphics.PorterDuff;
importandroid.graphics.PorterDuffXfermode;
importandroid.graphics.Rect;
importandroid.view.View;
publicclassMyViewextendsView{
privateBitmapbmp=null;
privatePaintpaint=null;
publicMyView(Contextcontext){
super(context);
//TODOAuto-generatedconstructorstub
paint=newPaint();//實例化畫筆類
BitmapFactory.Optionsoptions=newBitmapFactory.Options();
options.inJustDecodeBounds=true;
BitmapFactory.decodeResource(context.getResources(),R.drawable.test,options);//獲得你存放在drawable下的正方形圖片
options.inJustDecodeBounds=false;
BitmaptempBmp=BitmapFactory.decodeResource(context.getResources(),R.drawable.test,options);//實例化一個bitmap圖片類
intwidth=options.outWidth;
intheight=options.outHeight;
intsize=width>height?height:width;//邊框
intpos=(int)(size/2);
doubleradius=pos*Math.sin(45*180/Math.PI);//半徑
size=(int)(radius*2);
pos=(int)(size/2);
bmp=Bitmap.createBitmap(size,size,Config.ARGB_8888);
Canvascanvas=newCanvas(bmp);
Rectrect=newRect(0,0,size,size);
paint.setAntiAlias(true);
canvas.drawCircle(pos,pos,(float)radius,paint);
paint.setXfermode(newPorterDuffXfermode(PorterDuff.Mode.SRC_ATOP));
canvas.drawBitmap(tempBmp,rect,rect,paint);
tempBmp.recycle();
}
@SuppressLint("DrawAllocation")
@Override
protectedvoidonDraw(Canvascanvas){
//TODOAuto-generatedmethodstub
super.onDraw(canvas);
if(bmp!=null){
if(!bmp.isRecycled()){
canvas.drawBitmap(bmp,100,100,paint);
}
}
}
}

④ Android 圓角、圓形 ImageView 實現

我們要實現的圖片控制項繼承自 AppCompatImageView ,它是 ImageView 的子類,但提供了更好的兼容性,我們在此基礎上添加了若干自定義的屬性和方法以實現最終的 NiceImageView :

要實圓角或者圓形的顯示效果,就是對圖片顯示的內容區域進行「裁剪」,只顯示指定的區域即可。如何做呢?

一種比較直接的辦法是這樣的,由於圖片是被繪制在畫布上的,所以用 canvas 的 clipPath() 方法先將畫布裁剪成指定形狀,這樣就能讓圖片按指定形狀顯示了,重新 draw() 方法即可:

這樣使用 src 、 background 屬性給ImageView設置顯示的圖片都能達到預期的顯示效果。但是由於 clipPath() 方法不支持抗鋸齒,圖片邊緣會有明顯的毛糙感,體驗並不理想,所以需要尋找其它方法。

另一種方法是使用圖像的 Alpha 合成模式 ,即
PorterDuff 來實現, 官方文檔 。這里我們使用其中的 DST_IN 模式。整個過程就是先繪制目標圖像,也就是圖片;再繪制原圖像,即一個圓角矩形或者圓形,這樣最終目標圖像只顯示和原圖像重合的區域。

到這里就實現了顯示為圓角或者圓形了。但是需要通過 src 屬性或者對應的方法來設置圖片,否則不能達到預期效果。

繪制邊框就相對容易理解了,只需要繪制一個指定樣式的圓角矩形或者圓形即可:

當圖片顯示為圓形時,還可以繪制一個內邊框,但圓角矩形的話由於圓角大小的問題,目前只能設置一個邊框咯。

但是有個問題,繪制的邊框會覆蓋在圖片上,如果邊框太寬會導致圖片的可見區域變小了,影像顯示效果,像這樣,左下角的花盆不見了:

那麼如何讓邊框不覆蓋在圖片上呢?可以在 Alpha 合成繪制前先將畫布縮小一定比例,最後再繪制邊框,這樣問題就解決了。

縮放後的ImageView顯示區域的寬高就是原寬、高分別減去2倍的邊框寬度,這樣縮小的比例也就顯而易見了。效果如下,左下角的花盆出來了:

遮罩可以理解為一層帶透明度的顏色,遮罩默認不繪制,當制定了遮罩顏色時才會繪制,實現很簡單:

例如加一個透明度30%的紅色遮罩後的效果:

核心的實現邏輯就這些了,剩下的就是自定義屬性和方法了,有興趣的可以看源碼,都很簡單,希望對你有所幫助吧!

更多細節及用法見GitHub: https://github.com/SheHuan/NiceImageView

如果你需要實現類似釘釘的圓形組合頭像,例如:

閱讀全文

與android圓形裁剪框相關的資料

熱點內容
安卓怎麼關許可權保護隱私 瀏覽:390
海牛微視app怎麼用 瀏覽:70
單片機怎樣選變壓器 瀏覽:829
癌症pdf 瀏覽:725
雲伺服器鏡像批量部署環境 瀏覽:683
安卓手機瀏覽器能訪問什麼網站 瀏覽:254
找不到網站的伺服器ip地址該如何解決 瀏覽:743
演算法十個數降序排列 瀏覽:95
基於單片機的老年人健康監測系統 瀏覽:706
python入門經典pdf下載 瀏覽:17
東芝變頻2p空調壓縮機 瀏覽:227
自家wifi怎麼能加密 瀏覽:644
紅米k40加密門禁卡 瀏覽:847
什麼樣的源碼好看 瀏覽:156
手機主伺服器有什麼用 瀏覽:612
程序編寫命令 瀏覽:597
android發送心跳包 瀏覽:385
指標源碼和原理 瀏覽:700
汽車空調壓縮吸盤 瀏覽:208
崽崽因app版本不同不能邀請怎麼辦 瀏覽:686