




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Androidstudio實現(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45210-2025增材制造標(biāo)準(zhǔn)測試件增材制造系統(tǒng)幾何成形能力評估
- 離婚協(xié)議與財產(chǎn)分割合同范本
- 地鐵建設(shè)項目施工及設(shè)備安裝合同
- 新車購銷合同書
- 施工合同安全責(zé)任書:版
- 客戶預(yù)收款退款合同擔(dān)保
- 4感官幫助我 教學(xué)設(shè)計-2024-2025學(xué)年科學(xué)一年級上冊冀人版
- 人力資源服務(wù)合同(二)
- 7 不甘屈辱奮勇抗?fàn)?第一課時 教學(xué)設(shè)計-2023-2024學(xué)年道德與法治五年級下冊統(tǒng)編版
- 度員工派遣合同范本
- 四年級數(shù)學(xué)(四則混合運算帶括號)計算題專項練習(xí)與答案
- 2024年中考語文(云南卷)真題詳細(xì)解讀及評析
- 電梯消防安全與維護(hù)
- 夜景照明吊繩施工方案
- 2025借款合同范本個人向公司借款
- 文化差異下的家庭教育與親子關(guān)系探討
- 2025年中國棕櫚粕行業(yè)市場現(xiàn)狀、前景分析研究報告(智研咨詢發(fā)布)
- 【大學(xué)課件】工程倫理與社會
- 2025屆江蘇省南京市、鹽城市高三語文一模調(diào)研作文題目解析及范文:直路、陡坡、彎道
- 幼兒教育專業(yè)國家技能人才培養(yǎng)工學(xué)一體化課程設(shè)置方案
- 貨物學(xué) 課件全套 孔月紅 項目1-8:貨物與貨物學(xué)概述-集裝箱貨物
評論
0/150
提交評論