Android模仿京東商品詳情 選擇規格特效
最近我的5s實在卡的不行就打算買個手機,在京東上看手機的時候發現這個效果,感覺挺好玩的,就想著自己實現下,iOS版本有此效果,Android好像沒有。
思路
看到這個效果我馬上就想到了Matrix,不瞭解Matrix的同學可以去網上看看這方面的文章,還是很多的,Matrix有一個方法可以實現這種效果:
setPolyToPoly(float[] src, int srcIndex, float[] dst, int dstIndex,int pointCount)
接下來我們通過一個例子來看下它的作用
正常情況下一張圖片:
點選按鈕使用setPolyToPoly 方法以後效果
可以看出是改變了圖片上右和下右兩個座標點,程式碼如下:
ImageView imageView = (ImageView) findViewById(R.id.image);
imageView.setScaleType(ImageView.ScaleType.MATRIX);
matrix.setPolyToPoly(getFourPointArray(imageView, true), 0, getFourPointArray(imageView, false), 0, 4);
imageView.setImageMatrix(matrix);
private float[] getFourPointArray(View view, boolean src) {
float[] pointArray = new float[8];
pointArray[0] = 0;
pointArray[1] = 0;
pointArray[2] = src ? view.getWidth() : view.getWidth() - 50;
pointArray[3] = src ? 0 : 50;
pointArray[4] = src ? view.getWidth() : view.getWidth() - 50;
pointArray[5] = src ? view.getHeight() : view.getHeight() - 50;
pointArray[6] = 0;
pointArray[7] = view.getHeight();
return pointArray;
}
可以看到我在dst陣列中改變了上右和下右兩個座標點的大小,然後就實現了上面的效果,兩個陣列的長度是8,陣列裡兩條資料代表一個座標點,8條資料就代表4個座標點,分別是:上左,上右,下右,下左,學會使用這個方法效果就好實現了。
實現
首先使用屬性動畫來控制座標的變化
private void startAnimation(final int status) {
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float moveOffset = ((float) animation.getAnimatedValue() * offset);
setViewLocation(status, moveOffset);
postInvalidate();
}
});
valueAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
if(status == STATUS_ONE || status == STATUS_THREE) {
startAnimation(status == STATUS_ONE ? STATUS_TWO : STATUS_FOUR);
}
}
});
valueAnimator.setDuration(duration);
valueAnimator.start();}
在動畫的修改過程中,根據比例來設定view座標值,然後呼叫postInvalidate()方法發起繪製,達到動畫效果。
@Override
protected void dispatchDraw(Canvas canvas) {
if(!init) {
canvas.save();
mTopMatrix.reset();
mTopMatrix.setPolyToPoly(src, 0, dst, 0, src.length >> 1);
canvas.concat(mTopMatrix);
drawChild(canvas, mTopView, getDrawingTime());
canvas.restore();
drawChild(canvas, mBottomView, getDrawingTime());
return;
}
super.dispatchDraw(canvas);
}
呼叫mTopMatrix.setPolyToPoly(src, 0, dst, 0, src.length >> 1) 方法,繪製子view。
結束語
到此,整個流程已經分析完畢,想要看完整原始碼的
https://github.com/chenpengfei88/JDCommoditySelectSpecifications
如果大家覺得對自己有用,歡迎Star, Follow,謝謝。
相關文章
- 模仿京東選擇地址器
- Flutter 多規格商品選擇器核心工具 SKUFlutter
- 電商API分享:京東獲得JD商品詳情API
- 京東商品詳情介面,京東商品優惠券介面,京東商品分析資料介面,京東API介面封裝程式碼API封裝
- 京東商品詳情頁前端開發寶典前端
- 淘寶拼多多京東上貨必備API 商品詳情頁資料抓取 APP商品詳情原資料APIAPP
- 京東獲得JD商品詳情 API 返回值說明API
- 京東商品詳情資料採集介面(商品銷量,商品標題,商品優惠券,商品列表)程式碼展示
- 仿淘寶、京東拖拽商品詳情(可巢狀ViewPager、ListView、WebView、FragmentTabhost)巢狀ViewpagerWebViewFragment
- aliexpress商品詳情 APIExpressAPI
- 商品詳情API介面API
- 阿里巴巴商品採集介面 商品詳情api 商品主圖介面 商品詳情圖介面阿里API
- JD 商品詳情頁解析
- 京東商品列表介面,商品銷量排序介面,商品價格排序介面程式碼展示排序
- 京東商品詳情的應用領域及資料樣式返回展示
- 使用商品詳情API介面獲取商品資料API
- 商品新增-選擇商品型別自動載入商品屬性型別
- 解鎖淘寶商品詳情資料:淘寶天貓商品詳情介面助你精準營銷
- Android開商品屬性篩選與商品篩選Android
- 記錄--淘寶、京東複製好友連結彈出商品詳情是如何實現的
- 淘寶商品詳情介面(商品銷量介面,商品列表介面,商品影片介面)程式碼展示
- 商品多規格模型構造示例模型
- 如何使用Java呼叫商品詳情APIJavaAPI
- 拼多多商品詳情api呼叫示例API
- 拼多多根據ID取商品詳情 API介面(item_get-根據ID取商品詳情)API
- 京東商品詳情介面,驅動業務增長與最佳化使用者體驗
- 1688商品詳情APIERP選品專用API介面 Python JavaAPIPythonJava
- 採集淘寶商品詳情頁資料
- 商品詳情 API 返回值說明API
- Java語言獲取小紅書商品詳情 API介面(商品ID、商品標題等)JavaAPI
- 1688商品詳情資料介面、商品列表介面,商品屬性介面、商品優惠券介面
- 仿淘寶,京東多級地址選擇器
- Java獲取淘寶/天貓商品詳情 API介面(寶貝詳情資料、寶貝ID、寶貝標題、商品簡介等)JavaAPI
- 蝦皮API介面根據關鍵詞取商品列表(商品詳情,庫存,排序,價格...)返回值及說明API排序
- 阿里巴巴國際站API詳情介面獲取商品詳情介面阿里API
- 使用API介面獲取拼多多商品詳情API
- 如何使用商品詳情API介面來獲取想要的商品資料?API
- lazada 商品詳情介面,支援多站點採集(item_get - 獲得 lazada 商品詳情)程式碼展示