中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android如何實現商品詳情頁功能

發布時間:2022-03-30 10:18:12 來源:億速云 閱讀:447 作者:iii 欄目:移動開發

本篇內容介紹了“Android如何實現商品詳情頁功能”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

先看看效果實現

Android如何實現商品詳情頁功能

由于代碼量過多, 就不一一講解只介紹幾個核心的自定義控件)

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical">      <!-- 頂部標題 -->     <LinearLayout         android:id="@+id/ll_title_root"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:background="#ec0f38"         android:orientation="vertical">          <LinearLayout             android:layout_width="match_parent"             android:layout_height="44dp"             android:orientation="horizontal">              <LinearLayout                 android:id="@+id/ll_back"                 android:layout_width="wrap_content"                 android:layout_height="match_parent"                 android:paddingLeft="15dp">                  <ImageView                     android:id="@+id/iv_back"                     android:layout_width="22dp"                     android:layout_height="22dp"                     android:layout_gravity="center_vertical"                     android:src="@mipmap/address_come_back" />             </LinearLayout>              <LinearLayout                 android:layout_width="0dp"                 android:layout_height="match_parent"                 android:layout_weight="1"                 android:gravity="center">                  <!-- 商品、詳情、評價切換的控件 -->                 <com.gxz.PagerSlidingTabStrip                     android:id="@+id/psts_tabs"                     android:layout_width="wrap_content"                     android:layout_height="32dp"                     android:layout_gravity="center"                     android:textColor="#ffffff"                     android:textSize="15sp"                     app:pstsDividerColor="@android:color/transparent"                     app:pstsDividerPaddingTopBottom="0dp"                     app:pstsIndicatorColor="#ffffff"
  • ItemWebView是SlideDetailsLayout的子View (SlideDetailsLayout代碼太多, 放到了***)

    • 功能為顯示商品簡介的webview

    • 防止往上滑動時會直接滑動到***個View

    • 實現滑動到WebView頂部時, 讓父控件重新獲得觸摸事件

/**  * 商品詳情頁底部的webview  */ public class ItemWebView extends WebView {     public float oldY;     private int t;     private float oldX;      public ItemWebView(Context context) {         super(context);     }      public ItemWebView(Context context, AttributeSet attrs) {         super(context, attrs);     }      public ItemWebView(Context context, AttributeSet attrs, int defStyleAttr) {         super(context, attrs, defStyleAttr);     }       @Override     public boolean onTouchEvent(MotionEvent ev) {          switch (ev.getAction()) {             case MotionEvent.ACTION_MOVE:                 float Y = ev.getY();                 float Ys = Y - oldY;                 float X = ev.getX();                  //滑動到頂部讓父控件重新獲得觸摸事件                 if (Ys > 0 && t == 0) {                     getParent().getParent().requestDisallowInterceptTouchEvent(false);                 }                 break;              case MotionEvent.ACTION_DOWN:                 getParent().getParent().requestDisallowInterceptTouchEvent(true);                 oldY = ev.getY();                 oldX = ev.getX();                 break;              case MotionEvent.ACTION_UP:                 getParent().getParent().requestDisallowInterceptTouchEvent(true);                 break;              default:                 break;         }         return super.onTouchEvent(ev);     }      @Override     protected void onScrollChanged(int l, int t, int oldl, int oldt) {         this.t = t;         super.onScrollChanged(l, t, oldl, oldt);     }  }
  • ItemListView 也是SlideDetailsLayout的子View

    • 和ItemWebView功能大致一樣

/**  * 商品詳情頁底部的ListView  */ public class ItemListView extends ListView implements AbsListView.OnScrollListener {     private float oldX, oldY;     private int currentPosition;      public ItemListView(Context context) {         super(context);         setOnScrollListener(this);     }      public ItemListView(Context context, AttributeSet attrs) {         super(context, attrs);         setOnScrollListener(this);     }      public ItemListView(Context context, AttributeSet attrs, int defStyleAttr) {         super(context, attrs, defStyleAttr);         setOnScrollListener(this);     }       @Override     public boolean onTouchEvent(MotionEvent ev) {         switch (ev.getAction()) {             case MotionEvent.ACTION_MOVE:                 float Y = ev.getY();                 float Ys = Y - oldY;                 float X = ev.getX();                 int [] location = new int [2];                 getLocationInWindow(location);                  //滑動到頂部讓父控件重新獲得觸摸事件                 if (Ys > 0 && currentPosition == 0) {                     getParent().getParent().requestDisallowInterceptTouchEvent(false);                 }                 break;              case MotionEvent.ACTION_DOWN:                 getParent().getParent().requestDisallowInterceptTouchEvent(true);                 oldY = ev.getY();                 oldX = ev.getX();                 break;              case MotionEvent.ACTION_UP:                 getParent().getParent().requestDisallowInterceptTouchEvent(true);                 break;              default:                 break;         }         return super.onTouchEvent(ev);     }      @Override     public void onScrollStateChanged(AbsListView view, int scrollState) {         currentPosition = getFirstVisiblePosition();     }      @Override     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {      } }
  • NoScrollViewPager為最外層的父布局

    • 當滑動到圖文詳情模塊時, 能禁止掉ViewPager的滑動事件

/**  * 提供禁止滑動功能的自定義ViewPager  */ public class NoScrollViewPager extends ViewPager {     private boolean noScroll = false;      public NoScrollViewPager(Context context, AttributeSet attrs) {         super(context, attrs);     }       public NoScrollViewPager(Context context) {         super(context);     }      public void setNoScroll(boolean noScroll) {         this.noScroll = noScroll;     }      @Override     public void scrollTo(int x, int y) {         super.scrollTo(x, y);     }      @Override     public boolean onTouchEvent(MotionEvent arg0) {         if (noScroll)             return false;         else             return super.onTouchEvent(arg0);     }      @Override     public boolean onInterceptTouchEvent(MotionEvent arg0) {         if (noScroll)             return false;         else             return super.onInterceptTouchEvent(arg0);     }      @Override     public void setCurrentItem(int item, boolean smoothScroll) {         super.setCurrentItem(item, smoothScroll);     }      @Override     public void setCurrentItem(int item) {         super.setCurrentItem(item);     }  }

商品模塊最外層的布局是一個自定義的ViewGroup名為SlideDetailsLayout

SlideDetailsLayout內容有兩個View, mFrontView(***個View)和mBehindView(第二個View)

有兩種狀態, 狀態設置為close就顯示***個商品數據View, open狀態就顯示第二個圖文詳情View

@SuppressWarnings("unused") public class SlideDetailsLayout extends ViewGroup {      /**      * Callback for panel OPEN-CLOSE status changed.      */     public interface OnSlideDetailsListener {         /**          * Called after status changed.          *          * @param status {@link Status}          */         void onStatucChanged(Status status);     }      public enum Status {         /** Panel is closed */         CLOSE,         /** Panel is opened */         OPEN;          public static Status valueOf(int stats) {             if (0 == stats) {                 return CLOSE;             } else if (1 == stats) {                 return OPEN;             } else {                 return CLOSE;             }         }     }      private static final float DEFAULT_PERCENT = 0.2f;     private static final int DEFAULT_DURATION = 300;      private View mFrontView;     private View mBehindView;      private float mTouchSlop;     private float mInitMotionY;     private float mInitMotionX;       private View mTarget;     private float mSlideOffset;     private Status mStatus = Status.CLOSE;     private boolean isFirstShowBehindView = true;     private float mPercent = DEFAULT_PERCENT;     private long mDuration = DEFAULT_DURATION;     private int mDefaultPanel = 0;      private OnSlideDetailsListener mOnSlideDetailsListener;      public SlideDetailsLayout(Context context) {         this(context, null);     }      public SlideDetailsLayout(Context context, AttributeSet attrs) {         this(context, attrs, 0);     }      public SlideDetailsLayout(Context context, AttributeSet attrs, int defStyleAttr) {         super(context, attrs, defStyleAttr);          TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SlideDetailsLayout, defStyleAttr, 0);         mPercent = a.getFloat(R.styleable.SlideDetailsLayout_percent, DEFAULT_PERCENT);         mDuration = a.getInt(R.styleable.SlideDetailsLayout_duration, DEFAULT_DURATION);         mDefaultPanel = a.getInt(R.styleable.SlideDetailsLayout_default_panel, 0);

“Android如何實現商品詳情頁功能”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

开江县| 高台县| 新巴尔虎右旗| 名山县| 巴南区| 新竹县| 社旗县| 嘉峪关市| 库伦旗| 浙江省| 临夏县| 新乡县| 凉山| 手游| 长顺县| 横峰县| 鲜城| 梁山县| 枝江市| 界首市| 镶黄旗| 广灵县| 宜章县| 夏河县| 庆元县| 博白县| 崇明县| 衡阳市| 尉犁县| 太原市| 聊城市| 玉林市| 九寨沟县| 冀州市| 肥东县| 礼泉县| 和政县| 米易县| 桦南县| 嘉义县| 靖宇县|