Android使用Path實現仿最新淘寶輪播廣告底部弧形有鋸齒的問題以及解決辦法
在前面一篇博文《Android高仿京東淘寶自動無限迴圈輪播控制元件的實現思路和過程》中已經基本介紹了實現輪播廣告的基本思路和過程,但是仔細觀察淘寶的輪播廣告欄,發現在輪播廣告欄的底部有個小小的弧形,為了實現更好的效果,在後期中在自己定義的無限輪播控制元件中添加了底部弧形的實現,在實現的過程中也遇到了一些問題,比較麻煩的就是繪製時弧形出現了鋸齒的問題。
實現弧形的主要程式碼以及實現效果(帶有鋸齒的情況)
1. 新建 path
private Path createClipPath() {
final Path path = new Path();
path.moveTo(0 , 0);
path.lineTo(0, height);
path.quadTo(width / 2, height - 2 * arcHeight, width, height);
path.lineTo(width, 0);
path.close();
return path;
}
2.測量計算
繪製弧形是根據輪播控制元件的寬度和高度而來的,所以需要先測量出輪播控制元件的寬度和高度,並且當子 View 的位置和尺寸變化時,需要重新測量繪製。
@Override
protected void onLayout (boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
if (changed) {
calculateLayout();
}
}
/**
*calculate layout
*/
private void calculateLayout() {
height = getMeasuredHeight();
width = getMeasuredWidth();
if (width > 0 && height > 0) {
clipPath = createClipPath();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && arcShape != ArcShape.inSide) {
setOutlineProvider(new ViewOutlineProvider() {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void getOutline(View view, Outline outline) {
outline.setConvexPath(clipPath);
}
});
}
}
}
3、繪製弧形
繪製圖形時,有一個控制元件是很重要的,那就是 Canvas 畫布,也是最後一步,在畫布上面繪製。
@Override
protected void dispatchDraw(Canvas canvas) {
canvas.save();
canvas.clipPath(clipPath);
super.dispatchDraw(canvas);
canvas.restore();
}
4、效果圖
執行程式碼,可以看到效果,效果圖如下。
問題
底部的弧形雖然已經繪製成功了,但是從效果圖中可以明顯看出弧形帶有鋸齒,效果並不好,再看下現在淘寶的效果,有點困擾了。
解決辦法
解決方法並不難,但是需要引入另外一個繪圖工具 —— Paint,通過 Paint 來消除鋸齒,因為 Paint 本身就有自帶的消除鋸齒的方法 paint.setAntiAlias(true),當然還需要設定下 Xfermode,不過和目前網上提供的方法有所不同了,看下面的程式碼,修改在畫布 Canvas 中的繪製方法。
@Override
protected void dispatchDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.WHITE);
int saveCount = canvas.saveLayer(0, 0, getWidth(), getHeight(), null, Canvas.ALL_SAVE_FLAG);
super.dispatchDraw(canvas);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY));
canvas.drawPath(clipPath, paint);
canvas.restoreToCount(saveCount);
paint.setXfermode(null);
}
最終效果圖
修改程式碼後執行,獲得最終效果,已經明顯消除了鋸齒,效果優美多了,弧形變得光滑了。
相關推薦
Android使用Path實現仿最新淘寶輪播廣告底部弧形有鋸齒的問題以及解決辦法
在前面一篇博文《Android高仿京東淘寶自動無限迴圈輪播控制元件的實現思路和過程》中已經基本介紹了實現輪播廣告的基本思路和過程,但是仔細觀察淘寶的輪播廣告欄,發現在輪播廣告欄的底部有個小小的弧形,為了實現更好的效果,在後期中在自己定義的無限輪播控制元件中添加了
jQuery實現類似淘寶輪播圖
jQuery實現類似淘寶輪播圖 本週的作業是寫一個類似淘寶首頁的jQuery輪播圖,這裡做出記錄。 如有錯誤,歡迎批評指證。 html實現靜態的佈局 靜態佈局分析 一個輪播圖靜態的部分分為三個 展示區 圖片的儲存部分 左右按鈕 下方小圓點作為
原生js實現淘寶輪播圖,支援左右和跳轉(滑鼠點多快都不會亂)。
用transform是因為這個比left的效能好。 這個是演示網址(不要直接存下來哦):https://shalltears.github.io/test-sowing-map/ 。 這個是完整程式碼下載地址,覺得還行的下載支援一下:https://download.csdn.ne
396day(fixed, 淘寶輪播)
《2018年11月4日》【連續396天】 標題:fixed, 淘寶輪播; 內容: <head> <meta charset="UTF-8"> <title>Document</title> <style type="t
JS學習筆記 - 運動 - 淘寶輪播圖
<script> window.onload=function () { var oDiv=document.getElementById('play'); var aBtn=oDiv.getElementsByTagName('ol')[0].getElem
webview輪播圖與Android滑動衝突的解決辦法
在Android中我們經常需要左右滑動,其中內嵌的web頁面也有滑動動作。輪播圖舉例:需要左右翻頁時,會觸發Android中的ViewPager導致翻頁到另一個頁面輪播圖翻頁翻不動,或失效。但是由於安卓是父,而Web是子。在Web中不論你做什麼處理,都管不了父視窗的事情,所以
實現垂直輪播廣告(仿淘寶頭條) OC版本
1.先上效果圖 2 .可以實現下面效果 1》.可自由定義展示的內容(修改BannerContentView即可)。 2》使用方式類似ListView/RecyclerView。 3》可為當前顯示的內容新增各種事件,比如點選開啟某個頁面等。 4,實現垂直自動輪播
仿京東淘寶的秒殺倒計時實現
//菜鳥一枚請多指教 //這個是佈局檔案 <LinearLayout android:id="@+id/ll_xsqg" android:layout_width="match_parent" android:layout_height="wrap_conten
jQuery仿淘寶精品服飾廣告的實現
技術棧涉及 隱式迭代的遍歷 篩選選擇器 和為元素排序等 程式碼如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>仿淘寶精品
淺談android中僅僅使用一個TextView實現高仿京東,淘寶各種倒計時
今天給大家帶來的是僅僅使用一個TextView實現一個高仿京東、淘寶、唯品會等各種電商APP的活動倒計時。最近公司一直加班也沒來得及時間去整理,今天難得休息想把這個分享給大家,只求共同學習,以及自己後續的複習。為什麼會想到使用一個TextView來實現呢?因為最近公司在
用jquery實現帶左右按鍵的輪播圖
round 500px asc pub video 記錄 找到 blog span 成品如下: 簡單來說就是點擊“右”按鈕時,轉換到右邊的下一幅圖片,同時上面的小方塊顏色也跟著改變,如果已經是最後一幅圖片,再點擊“右”,則轉換到第一幅圖片,是直接向左移找到第一幅圖的,明天
2017最新淘寶高轉化詳情頁排版技巧(轉載)
log 產品 風格 span 有用 img 信息 核心 屬於 詳情頁,首先我們要明白一件事情,詳情頁是什麽?是幹什麽的?平時我們在線下門店或商場買東西的時候,我們能直觀的看到商品,可以摸到商品的材質,還可以聽到銷售人員的講解。而淘寶上的商品,用戶只能靠眼睛去看,最終下不下單
jquery實現多模塊切換輪播
jquery css3 說兩句廢話:對於一個小白癡來說,get這些知識真的是有點費勁,我還沒學jquery,看了這對應的公開課後,自己敲了一天才整理好,希望總結後更上一層樓。 最後要完成的效果圖: 效果圖說明: 左邊的框框會一個一個的往後走,第一個(南京)有一個默認的深紅色的背景。 可以隨意的點擊框
Swiper實現全屏視覺差輪播
簡單 ini shee cal 背景圖 reason 教師節 http tor Swiper作為當代流行的js框架,非常受到青睞,這裏演示swiper在pc端全屏視覺輪播的效果,這也是pc端常用的一種特性 一 以教師節為主題的一個全屏輪播 1 首先加載插件,需要用到的
Android使用ViewPager實現左右迴圈滑動及輪播效果
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
2018最新淘寶面試出爐:分散式鎖+叢集+一致Hash演算法+底層技術原理
是需要掌握牢固,重點會問HashMap等集合類,以及多執行緒、執行緒池等。 原文連結:https://blog.csdn.net/SpringJavaMyBatis/article/details/83415696 &n
QML實現網頁左右滑動的輪播圖效果
網頁中有很多的左右滑動的圖片輪動的效果。QML實現此效果的兩種方式。 PageIndicator和TabBar 也對應兩種樣式。 其中左右滑動的動畫效果是利用SwipeView的預設切換動畫效果 import QtQuick 2.9 import QtQuick.Controls 2.
原生js仿網易雲輪播特效
原理:運用兩張圖片切換 可視區域向左走或向右走 要跳轉的圖片定位在可視區域的左邊或右邊 然後用緩動動畫實現切換 重點:緩動動畫 js實現步驟:1、獲取所需元素 2、建立指示器 3.讓第一個選中 4.新增事件 5、切換索引 6、自動輪播 1、獲取所需元素 var slider=$(
實現頁面公告欄迴圈向上輪播
解決方案 1、 HTML 先建一個div層作為公告顯示區,裡面包裹一個公告列表(ul); ? 1 2
jquery實現圖片向左慢慢輪播(滑鼠懸停圖片停止輪播版)
window.onload=function(){ function $(id){ return document.getElementById(id); } var num=0; function autopl