上面的其實和普通的linearlayout,relativelayout一樣,只是上下兩邊多了類似於半圓鋸齒的形狀。那麼只需要處理不同地方。可以在上下兩條線上畫乙個個白色的小圓來實現這種效果。
假如我們上下線的半圓以及半圓與半圓之間的間距是固定的,那麼不同尺寸的螢幕肯定會畫出不同數量的半圓,那麼我們只需要根據控制項的寬度來獲取能畫的半圓數。
大家觀察,很容易發現,圓的數量總是圓間距數量-1,也就是,假設圓的數量是circlenum,那麼圓間距就是circlenum+1。
所以我們可以根據這個計算出circlenum.
circlenum = (int) ((w-gap)/(2*radius+gap));
這裡gap就是圓間距,radius是圓半徑,w是view的寬。
看**
public
class
coupondisplayview
extends
linearlayout
public
coupondisplayview(context context, attributeset attrs)
@override
protected
void
onsizechanged(int w, int h, int oldw, int oldh)
circlenum = (int) ((w-gap)/(2*radius+gap));
}public
coupondisplayview(context context, attributeset attrs, int defstyleattr)
上面定義了圓的半徑和圓間距,同時初始化了這些值並且獲取了需要畫的圓數量。
接下來只需要乙個乙個將圓畫出來就可以了。
@override
protected
void
ondraw(canvas canvas)
}
簡單的根據circlenum的數量進行了圓的繪製。
這裡remain/2是因為,可以一些情況,計算出來的可以畫的數量不是剛好整除的。這樣就會出現右邊最後乙個間距會比其它的間距都要寬。
所以我們在繪製第乙個的時候加上了餘下的間距的一半,即使是不整除的情況。至少也能保證第乙個和最後乙個間距寬度一致。
這樣就實現了。
看看效果
<?xml version="1.0" encoding="utf-8"?>
xmlns:android=""
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingleft="16dp"
android:paddingright="16dp"
android:paddingtop="20dp">
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/indicator_color"
android:padding="20dp">
android:layout_width="120dp"
android:layout_height="match_parent"
android:src="@drawable/goods_test"
android:scaletype="centercrop"/>
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingleft="16dp">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textsize="18dp"
android:text="美食劵"
/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textsize="12dp"
android:padding="5dp"
android:text="編號:11223124123213131"
/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textsize="12dp"
android:padding="5dp"
android:text="編號:11223124123213131"
/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textsize="12dp"
android:paddingleft="5dp"
android:paddingtop="5dp"
android:text="截止日期:2001-09-07"
/>
linearlayout>
com.qiangyu.test.view.coupondisplayview>
framelayout>
效果圖:
css 效果 邊沿打孔的優惠券
專案中用到了這個邊沿打孔的效果,嘗試下來使用純css寫的這個樣式,在這裡分享一下 效果大致如圖 分步實現思路 1,先畫兩個帶圓角的框,a和b a b分別需要加投影效果,圖上沒有做 2,在b的左右兩條縫隙的地方分別畫一排圓 其實是正方形用了50 的圓角 圓填充色和背景色相同 此處背景色是白色,所以圓的...
css3實現優惠券效果(向內凹的圓)
背景色和自身 優惠券 的顏色會改變,實現向內凹的圓效果,效果圖如下。如果叫設計師切好幾十種背景圖是很不現實的,只能用 來實現,效能會比較好。隨著背景色的改變,向內凹圓的背景色也要跟著變,因此,向內凹陷的部分只能設定成透明。實現如下三種情況 1 第一種情況 純色 自身 優惠券 的顏色是純色的,這個實現...
Scrollview回彈效果自定義控制項
滾動回彈效果分析 首先,建立乙個類,繼承scrollview,重寫ontouch事件,實現伸縮回彈效果。scroollview節點下只能有乙個子節點,這個子節點就是我們要移動的view布局。第一步 獲取要操作的子view布局 第二步 重寫ontouch事件監聽 分析具體事件 觀察分析得出結論 讓布局...