動態給元件新增背景,一半圓角

2022-07-04 02:21:12 字數 2024 閱讀 2191

我們在自定義view的時候有時候需要給元件乙個背景,而這個背景可能是不規則的,比如乙個紅色背景,但是左邊有圓角,右邊沒有,那麼應該怎麼做呢?在這裡我以textview為例。

用xml的方式很容易實現,不過我們這裡是在**中動態實現的。

先放上效果圖:

一開始的思路是直接在textview上面繪製,但是這樣會出現一種情況,就是繪製完之後,字型就看不到了,所以我們還是得從背景入手,通過setbackgrounddrawable()方法給它乙個背景,而這個背景是我們自己繪製出來的。drawable類可以實現該效果:

1、畫筆和view

/**

* 畫背景的畫筆

*/private

paint mpaintbg;

mpaintbg = new

paint();

/*** textview

*/private textview tv;

2、初始化畫筆:

//

設定畫筆的顏色

mpaintbg.setcolor(mcontext.getresources().getcolor(r.color.theme));

//型別為填充

mpaintbg.setstyle(paint.style.fill);

//抗鋸齒

mpaintbg.setantialias(true

);mpaintbg.setstrokewidth(mcontext.getresources().getdimension(r.dimen.size));

2、設定drawable

drawable drawable = new

drawable()

@override

public

void setalpha(int

i) @override

public

void

setcolorfilter(@nullable colorfilter colorfilter)

@override

public

intgetopacity()

};

4、在家注意到了,上面的的**canvas.drawpath(path, mpaintbg);裡面引數有乙個path,這個path是我們繪製的路徑。怎麼設定這個path呢?**如下:

rectf rectfbg;

path path = new

path();

rectfbg = new rectf(0, 0, lefttv.getwidth(), lefttv.getheight());

path.addroundrect(rectfbg,

newfloat, path.direction.cw);

這裡用到了path的乙個方法:

public void addroundrect (rectf rect, float radii, path.direction dir)

增加乙個閉合的圓角矩形到path當中

radii:表示各個角的半徑點x,y,依次是左上角,右上角,右下角,左下角,

rect:矩形位置

dir:繪製的方向,有兩種

path.direction.cw:順時針

path.direction.ccw:逆時針

最後把該drawable設定給textview

tv.setbackgrounddrawable(drawable)
就此完成了。

動態桌布給linux發行版新增活力背景

我們知道你想擁有乙個有格調的ubuntu桌面來炫耀一下 在linxu上費一點點勁搭建乙個出色的工作環境是很簡單的。今天,我們 重新 著重來 長駐你腦海中那些東西 一款自由,開源,能夠給你的截圖增添光彩的工具。它叫 live wall 正如你猜的那樣 它用由opengl驅動的一款動態桌面背景來代替標準...

給動態元素動態新增樣式

工作上乙個問題,我在ul的容器裡動態新增li標籤,如果給固定樣式的話完全沒問題。但是我想給li動態新增樣式,除了ajax外,我想用jq實現,但是一直不知道怎麼實現。我知道有幾種方法,可以給動態元素新增樣式的,例如我用jquery裡面的load方法載入進了test.html入index.html裡面的...

給Jquery動態新增的元素新增事件

我想很多人都會向我一樣曾經 被新元素的事件繫結困惑很久也就是 在頁面載入完成後給元素繫結了事件,但又新增加的元素上卻沒有繫結任何事件。js的事件監聽跟css不一樣,css只要設定好了樣式,不論是原來就有的還是新新增的,都有一樣的表現。而事件監聽不是,你必須給每乙個元素單獨繫結事件。常見的例子是處理 ...