![【移動應(yīng)用開發(fā)技術(shù)】Android studio 實(shí)現(xiàn)圓形ImageView的方法步驟_第1頁](http://file4.renrendoc.com/view/62516481a9ed43871220b9e04c2675d8/62516481a9ed43871220b9e04c2675d81.gif)
![【移動應(yīng)用開發(fā)技術(shù)】Android studio 實(shí)現(xiàn)圓形ImageView的方法步驟_第2頁](http://file4.renrendoc.com/view/62516481a9ed43871220b9e04c2675d8/62516481a9ed43871220b9e04c2675d82.gif)
![【移動應(yīng)用開發(fā)技術(shù)】Android studio 實(shí)現(xiàn)圓形ImageView的方法步驟_第3頁](http://file4.renrendoc.com/view/62516481a9ed43871220b9e04c2675d8/62516481a9ed43871220b9e04c2675d83.gif)
![【移動應(yīng)用開發(fā)技術(shù)】Android studio 實(shí)現(xiàn)圓形ImageView的方法步驟_第4頁](http://file4.renrendoc.com/view/62516481a9ed43871220b9e04c2675d8/62516481a9ed43871220b9e04c2675d84.gif)
![【移動應(yīng)用開發(fā)技術(shù)】Android studio 實(shí)現(xiàn)圓形ImageView的方法步驟_第5頁](http://file4.renrendoc.com/view/62516481a9ed43871220b9e04c2675d8/62516481a9ed43871220b9e04c2675d85.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Androidstudio實(shí)現(xiàn)圓形ImageView的方法步驟
1.新建一個RoundImageView.java文件packagecom.jhg.freshman;
importandroid.content.Context;
importandroid.content.res.TypedArray;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapShader;
importandroid.graphics.Canvas;
importandroid.graphics.Matrix;
importandroid.graphics.Paint;
importandroid.graphics.RectF;
importandroid.graphics.Shader;
importandroid.graphics.drawable.Drawable;
importandroid.os.Build;
importandroid.util.AttributeSet;
importandroid.util.TypedValue;
importandroid.widget.ImageView;
publicclassRoundImageViewextendsandroid.support.v7.widget.AppCompatImageView{
/**
*圓形模式
*/
privatestaticfinalintMODE_CIRCLE=1;
/**
*普通模式
*/
privatestaticfinalintMODE_NONE=0;
/**
*圓角模式
*/
privatestaticfinalintMODE_ROUND=2;
privatePaintmPaint;
privateintcurrMode=0;
/**
*圓角半徑
*/
privateintcurrRound=dp2px(10);
publicRoundImageView(Contextcontext){
super(context);
initViews();
}
publicRoundImageView(Contextcontext,AttributeSetattrs){
this(context,attrs,0);
}
publicRoundImageView(Contextcontext,AttributeSetattrs,intdefStyleAttr){
super(context,attrs,defStyleAttr);
obtainStyledAttrs(context,attrs,defStyleAttr);
initViews();
}
privatevoidobtainStyledAttrs(Contextcontext,AttributeSetattrs,intdefStyleAttr){
TypedArraya=context.obtainStyledAttributes(attrs,R.styleable.RoundImageView,defStyleAttr,0);
currMode=a.hasValue(R.styleable.RoundImageView_type)?a.getInt(R.styleable.RoundImageView_type,MODE_NONE):MODE_NONE;
currRound=a.hasValue(R.styleable.RoundImageView_radius)?a.getDimensionPixelSize(R.styleable.RoundImageView_radius,currRound):currRound;
a.recycle();
}
privatevoidinitViews(){
mPaint=newPaint(Paint.ANTI_ALIAS_FLAG|Paint.DITHER_FLAG);
}
@Override
protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
/**
*當(dāng)模式為圓形模式的時候,我們強(qiáng)制讓寬高一致
*/
if(currMode==MODE_CIRCLE){
super.onMeasure(widthMeasureSpec,heightMeasureSpec);
intresult=Math.min(getMeasuredHeight(),getMeasuredWidth());
setMeasuredDimension(result,result);
}else{
super.onMeasure(widthMeasureSpec,heightMeasureSpec);
}
}
@Override
protectedvoidonDraw(Canvascanvas){
DrawablemDrawable=getDrawable();
MatrixmDrawMatrix=getImageMatrix();
if(mDrawable==null){
return;//couldn'tresolvetheURI
}
if(mDrawable.getIntrinsicWidth()==0||mDrawable.getIntrinsicHeight()==0){
return;//nothingtodraw(emptybounds)
}
if(mDrawMatrix==null&&getPaddingTop()==0&&getPaddingLeft()==0){
mDrawable.draw(canvas);
}else{
finalintsaveCount=canvas.getSaveCount();
canvas.save();
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.JELLY_BEAN){
if(getCropToPadding()){
finalintscrollX=getScrollX();
finalintscrollY=getScrollY();
canvas.clipRect(scrollX+getPaddingLeft(),scrollY+getPaddingTop(),
scrollX+getRight()-getLeft()-getPaddingRight(),
scrollY+getBottom()-getTop()-getPaddingBottom());
}
}
canvas.translate(getPaddingLeft(),getPaddingTop());
if(currMode==MODE_CIRCLE){//當(dāng)為圓形模式的時候
Bitmapbitmap=drawable2Bitmap(mDrawable);
mPaint.setShader(newBitmapShader(bitmap,Shader.TileMode.CLAMP,Shader.TileMode.CLAMP));
canvas.drawCircle(getWidth()/2,getHeight()/2,getWidth()/2,mPaint);
}elseif(currMode==MODE_ROUND){//當(dāng)為圓角模式的時候
Bitmapbitmap=drawable2Bitmap(mDrawable);
mPaint.setShader(newBitmapShader(bitmap,Shader.TileMode.CLAMP,Shader.TileMode.CLAMP));
canvas.drawRoundRect(newRectF(getPaddingLeft(),getPaddingTop(),getWidth()-getPaddingRight(),getHeight()-getPaddingBottom()),
currRound,currRound,mPaint);
}else{
if(mDrawMatrix!=null){
canvas.concat(mDrawMatrix);
}
mDrawable.draw(canvas);
}
canvas.restoreToCount(saveCount);
}
}
/**
*drawable轉(zhuǎn)換成bitmap
*/
privateBitmapdrawable2Bitmap(Drawabledrawable){
if(drawable==null){
returnnull;
}
Bitmapbitmap=Bitmap.createBitmap(getWidth(),getHeight(),Bitmap.Config.ARGB_8888);
Canvascanvas=newCanvas(bitmap);
//根據(jù)傳遞的scaletype獲取matrix對象,設(shè)置給bitmap
Matrixmatrix=getImageMatrix();
if(matrix!=null){
canvas.concat(matrix);
}
drawable.draw(canvas);
returnbitmap;
}
privateintdp2px(floatvalue){
return(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,value,getResources().getDisplayMetrics());
}
}
2.在Value下新建一個attrs.xml文件<?
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025砌筑工程勞務(wù)承包合同范本
- 2025建材店勞動合同
- 倉庫聯(lián)合經(jīng)營合同范例
- 個人簽訂租賃合同范例
- 關(guān)于小型施工合同范例
- 專利合作銷售合同范本
- 冷庫裝卸合同范本
- 90代勞動合同范例
- 保障租房合同范例
- 臨時用人合同范本
- 老師呀請你別生氣教學(xué)反思
- 2023年北京市平谷區(qū)中考英語二模試卷
- 變壓器更換施工方案
- 【高分復(fù)習(xí)筆記】陳澄《新編地理教學(xué)論》筆記和課后習(xí)題詳解
- 安徽新宸新材料有限公司年產(chǎn)6000噸鋰離子電池材料雙氟磺酰亞胺鋰項(xiàng)目環(huán)境影響報告書
- 日本酒類消費(fèi)行業(yè)市場分析報告
- GB/T 29594-2013可再分散性乳膠粉
- 西子奧的斯電梯ACD2調(diào)試說明書
- 成長感恩責(zé)任高中主題班會-課件
- 建設(shè)項(xiàng)目全過程工程咨詢服務(wù)指引(咨詢企業(yè)版)(征求意見稿)
- 分手的協(xié)議書模板(5篇)
評論
0/150
提交評論