Android怎么實現(xiàn)淘寶商品詳情頁效果?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯(lián)建站專注于成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)頁設計、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務”的宗旨,從客戶的利益和觀點出發(fā),讓客戶在網(wǎng)絡營銷中找到自己的駐足之地。尊重和關懷每一位客戶,用嚴謹?shù)膽B(tài)度對待客戶,用專業(yè)的服務創(chuàng)造價值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。布局文件
這塊主要是設置剛進入頁面時的透明頭部 主要組成部分有返回鍵 和頭部的方形小圖片 還有分享按鈕 以及你想附加的標題功能 默認進入是透明的只顯示返回按鈕
這部分主要是我們的標簽選項卡 我這邊采用的是RadioGroup+radioButton實現(xiàn)的 類似于淘寶的商品、評價、詳情等標簽
這樣我們的頁面布局頭部就完成了 下面我們來看下具體組成內(nèi)容
這部分就是我們的具體頁面內(nèi)容 可以看到我們的詳情頁面數(shù)據(jù)使用自定義的一個Scrollview來包裹的 其中分為4塊 我們布局里面寫的很清楚 分別對應著詳情頁中的四個模塊 當然 我這里面只是用圖片來代替內(nèi)容了 具體內(nèi)容可自己填充
下面來看下我們具體實現(xiàn)代碼
StatusBarCompat.translucentStatusBar(this);
我這邊是采用的第三方的沉浸式透明狀態(tài)欄 你們可以自行替換
dependencies { compile ('com.github.niorgai:StatusBarCompat:2.1.4', { exclude group: 'com.android.support' }) }
這個是我沉浸式狀態(tài)欄的依賴 感興趣的可以了解一下
Rect rectangle= new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(rectangle); ideaScrollView.setViewPager(viewPager,getMeasureHeight(headerParent)-rectangle.top); icon.setImageAlpha(0); radioGroup.setAlpha(0); radioGroup.check(radioGroup.getChildAt(0).getId());
上面是獲取狀態(tài)欄的高度并且使用自定義scrollview綁定banner圖片 并獲取圖片高度
以及初始化我們頭部部分控件的透明度 和默認選擇第一個標簽
View one = findViewById(R.id.one); View two = findViewById(R.id.two); View four = findViewById(R.id.four); View three = findViewById(R.id.three); ArrayListararyDistance = new ArrayList<>(); araryDistance.add(0); araryDistance.add(getMeasureHeight(one)-getMeasureHeight(headerParent)); araryDistance.add(getMeasureHeight(one)+getMeasureHeight(two)-getMeasureHeight(headerParent)); araryDistance.add(getMeasureHeight(one)+getMeasureHeight(two)+getMeasureHeight(three)-getMeasureHeight(headerParent)); ideaScrollView.setArrayDistance(araryDistance);
這塊是我們獲取到我們的四個模塊的高度 并把高度存到集合中 傳入到我們自定義的scrollview中
private void scrollToPosition(int position){ scrollTo(0,arrayDistance.get(position)); }
scrollview通過傳過來的高度進行定位滑動 意思就是點擊我們的標題選項滑動到相應的位置
public int getMeasureHeight(View view){ int width = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); int height = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); view.measure(width, height); return view.getMeasuredHeight(); }
這個是獲取控件高度的方法
ideaScrollView.setOnScrollChangedColorListener(new IdeaScrollView.OnScrollChangedColorListener() { @Override public void onChanged(float percentage) { int color = getAlphaColor(percentage>0.9f?1.0f:percentage); header.setBackgroundDrawable(new ColorDrawable(color)); radioGroup.setBackgroundDrawable(new ColorDrawable(color)); icon.setImageAlpha((int) ((percentage>0.9f?1.0f:percentage)*255)); radioGroup.setAlpha((percentage>0.9f?1.0f:percentage)*255); setRadioButtonTextColor(percentage); } @Override public void onChangedFirstColor(float percentage) { } @Override public void onChangedSecondColor(float percentage) { } });
這個監(jiān)聽方法是監(jiān)測我們滑動的距離 來改變我們標題的顏色 從透明慢慢滑動進行顏色漸變 以及設置我們頭部控件的顏色 和展示我們的標題選項卡
public int getAlphaColor(float f){ return Color.argb((int) (f*255),0x09,0xc1,0xf4); } public int getLayerAlphaColor(float f){ return Color.argb((int) (f*255),0x09,0xc1,0xf4); } public int getRadioCheckedAlphaColor(float f){ return Color.argb((int) (f*255),0x44,0x44,0x44); } public int getRadioAlphaColor(float f){ return Color.argb((int) (f*255),0xFF,0xFF,0xFF); }
可以根據(jù)這塊來改變我們頭部以及標題的顏色 根據(jù)傳入的值來進行顏色漸變
ideaScrollView.setOnSelectedIndicateChangedListener(new IdeaScrollView.OnSelectedIndicateChangedListener() { @Override public void onSelectedChanged(int position) { isNeedScrollTo = false; radioGroup.check(radioGroup.getChildAt(position).getId()); isNeedScrollTo = true; } }); radioGroup.setOnCheckedChangeListener(radioGroupListener); private RadioGroup.OnCheckedChangeListener radioGroupListener =new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) { for(int i=0;i根據(jù)這兩個監(jiān)聽方法來改變我們標題的選中tab 滑動到不同的位置選中對應的Tab并改變顏色 具體實現(xiàn)方法看自定義Scrollview
根據(jù)限定距離(Banner)計算百分比偏移量,實現(xiàn)顏色漸變、透明度漸變(淘寶商品詳情頁有二次顏色漸變)
@Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); if (viewPager != null && t != oldt) { viewPager.setTranslationY(t/2); } if(viewPager!=null&&t<=point.x-headerHeight&&getOnScrollChangedColorListener()!=null){ getOnScrollChangedColorListener().onChanged(Math.abs(t)/Float.valueOf(point.x-headerHeight)); if(t<=(point.x-headerHeight)/2){ getOnScrollChangedColorListener().onChangedFirstColor(t/(point.x-headerHeight)/2); }else{ getOnScrollChangedColorListener().onChangedSecondColor((t-(point.x-headerHeight)/2)/(point.x-headerHeight)/2); } } int currentPosition = getCurrentPosition(t,arrayDistance); if(currentPosition!=position&&getOnSelectedIndicateChangedListener()!=null){ getOnSelectedIndicateChangedListener().onSelectedChanged(currentPosition); } this.position = currentPosition; } private int getCurrentPosition(int t, ArrayListarrayDistance) { int index = 0; for (int i=0;i =arrayDistance.get(i)&&t 下面是自定義Scrollview的全部代碼
package com.text.lg.ideascrollview; import android.content.Context; import android.graphics.Point; import android.util.AttributeSet; import android.view.WindowManager; import android.widget.ScrollView; import java.util.ArrayList; public class IdeaScrollView extends ScrollView { private final Point point; private IdeaViewPager viewPager; private int position = 0; ArrayListarrayDistance = new ArrayList<>(); private int headerHeight; public IdeaScrollView(Context context) { this(context,null,0); } public IdeaScrollView(Context context, AttributeSet attrs) { this(context, attrs,0); } public IdeaScrollView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); point = new Point(); windowManager.getDefaultDisplay().getSize(point); } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); if (viewPager != null && t != oldt) { viewPager.setTranslationY(t/2); } if(viewPager!=null&&t<=point.x-headerHeight&&getOnScrollChangedColorListener()!=null){ getOnScrollChangedColorListener().onChanged(Math.abs(t)/Float.valueOf(point.x-headerHeight)); if(t<=(point.x-headerHeight)/2){ getOnScrollChangedColorListener().onChangedFirstColor(t/(point.x-headerHeight)/2); }else{ getOnScrollChangedColorListener().onChangedSecondColor((t-(point.x-headerHeight)/2)/(point.x-headerHeight)/2); } } int currentPosition = getCurrentPosition(t,arrayDistance); if(currentPosition!=position&&getOnSelectedIndicateChangedListener()!=null){ getOnSelectedIndicateChangedListener().onSelectedChanged(currentPosition); } this.position = currentPosition; } private int getCurrentPosition(int t, ArrayList arrayDistance) { int index = 0; for (int i=0;i =arrayDistance.get(i)&&t getArrayDistance() { return arrayDistance; } public void setArrayDistance(ArrayList arrayDistance) { this.arrayDistance = arrayDistance; } public OnSelectedIndicateChangedListener getOnSelectedIndicateChangedListener() { return onSelectedIndicateChangedListener; } public void setOnSelectedIndicateChangedListener(OnSelectedIndicateChangedListener onSelectedIndicateChangedListener) { this.onSelectedIndicateChangedListener = onSelectedIndicateChangedListener; } } 看完上述內(nèi)容,你們掌握Android怎么實現(xiàn)淘寶商品詳情頁效果的方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
分享題目:Android怎么實現(xiàn)淘寶商品詳情頁效果-創(chuàng)新互聯(lián)
鏈接地址:http://weahome.cn/article/djhsdo.html