自定義控制項 邊緣凹凸的優惠券效果

2021-07-13 22:42:39 字數 2974 閱讀 2488

上面的其實和普通的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事件監聽 分析具體事件 觀察分析得出結論 讓布局...