1、上效果圖
3、用法:
先說缺點:只能在xml中用src屬性有效。用**動態定義控制項無效。
就說一點吧,因為用到自定義屬性,所以需引用自定義的xmlns:
如果沒有此句,則會報錯:error: error parsing xml: unbound prefix。
對於該控制項用法:
<?xml version="1.0" encoding="utf-8"?>
package de.hdodenhof.circleimageview.sample;
import android.content.context;
import android.content.res.typedarray;
import android.graphics.bitmap;
import android.graphics.bitmapshader;
import android.graphics.canvas;
import android.graphics.color;
import android.graphics.matrix;
import android.graphics.paint;
import android.graphics.rectf;
import android.graphics.shader;
import android.graphics.drawable.bitmapdrawable;
import android.graphics.drawable.colordrawable;
import android.graphics.drawable.drawable;
import android.util.attributeset;
import android.widget.imageview;
public class circleimageview extends imageview
public circleimageview(context context, attributeset attrs)
public circleimageview(context context, attributeset attrs, int defstyle)
} @override
public scaletype getscaletype()
@override
public void setscaletype(scaletype scaletype)
} @override
protected void ondraw(canvas canvas)
canvas.drawcircle(getwidth() / 2, getheight() / 2, mborderradius, mborderpaint);
} @override
protected void onsizechanged(int w, int h, int oldw, int oldh)
public int getbordercolor()
public void setbordercolor(int bordercolor)
mbordercolor = bordercolor;
mborderpaint.setcolor(mbordercolor);
invalidate();
} public int getborderwidth()
public void setborderwidth(int borderwidth)
mborderwidth = borderwidth;
setup();
} @override
public void setimagebitmap(bitmap bm)
@override
public void setimagedrawable(drawable drawable)
@override
public void setimageresource(int resid)
private bitmap getbitmapfromdrawable(drawable drawable)
if (drawable instanceof bitmapdrawable)
try else
canvas canvas = new canvas(bitmap);
drawable.setbounds(0, 0, canvas.getwidth(), canvas.getheight());
drawable.draw(canvas);
return bitmap;
} catch (outofmemoryerror e)
} private void setup()
if (mbitmap == null)
mbitmapshader = new bitmapshader(mbitmap, shader.tilemode.clamp, shader.tilemode.clamp);
mborderpaint.setstyle(paint.style.stroke);
mborderpaint.setantialias(true);
mborderpaint.setcolor(mbordercolor);
mborderpaint.setstrokewidth(mborderwidth);
mbitmapheight = mbitmap.getheight();
mbitmapwidth = mbitmap.getwidth();
mborderrect.set(0, 0, getwidth(), getheight());
mborderradius = math.min((mborderrect.height() - mborderwidth) / 2, (mborderrect.width() - mborderwidth) / 2);
mdrawablerect.set(mborderwidth, mborderwidth, mborderrect.width() - mborderwidth, mborderrect.height() - mborderwidth);
mdrawableradius = math.min(mdrawablerect.height() / 2, mdrawablerect.width() / 2);
updateshadermatrix();
invalidate();
} private void updateshadermatrix() else
mshadermatrix.setscale(scale, scale);
mshadermatrix.posttranslate((int) (dx + 0.5f) + mborderwidth, (int) (dy + 0.5f) + mborderwidth);
mbitmapshader.setlocalmatrix(mshadermatrix);
}}
帶邊框 Border 的LinearLayout
先看一下這樣乙個簡單的布局,所展示的內容很少,上下兩條分割線,兩個文字。1.普通做法 2.將分割線view定義在border.xml裡面,通過include引入。3.將兩條線放到.9中。4.自定義linearlayout將分割線定義為屬性。public class borderlinearlayou...
框架學習六 ViewPagerIndicator
一 是什麼 看效果圖 即viewpager的分頁指示器,比如很多應用的指引介面,下面的小圓點,還有一些應用上面的tab等,viewpagerindicator都能很好的實現。支援的最高版本 api16。當然可更改。注意 如果新建的專案下包含android support v4.jar,你要將其刪除,...
帶選單的無邊框窗體
帶選單的無邊框窗體 前幾天做了乙個窗體,是無邊框的,可是在我加了一些右鍵選單後,窗體的邊框就出來了,很是糾結。後來就上網查了一些資料,終於把邊框去掉了,甚至是邊框處的黑色框線。現在拿出來曬曬。繼續前一篇的文章自定義形狀窗體,把窗體做成自定義的的形狀後,這時,你進行選單編輯後,可能窗體邊框就又回來了,...