【移動應(yīng)用開發(fā)技術(shù)】Android studio 實(shí)現(xiàn)圓形ImageView的方法步驟_第1頁
【移動應(yīng)用開發(fā)技術(shù)】Android studio 實(shí)現(xiàn)圓形ImageView的方法步驟_第2頁
【移動應(yīng)用開發(fā)技術(shù)】Android studio 實(shí)現(xiàn)圓形ImageView的方法步驟_第3頁
【移動應(yīng)用開發(fā)技術(shù)】Android studio 實(shí)現(xiàn)圓形ImageView的方法步驟_第4頁
【移動應(yīng)用開發(fā)技術(shù)】Android studio 實(shí)現(xiàn)圓形ImageView的方法步驟_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余2頁可下載查看

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論