利用Android制作一个商品详情页

  介绍

今天就跟大家聊聊有关利用Android制作一个商品详情页,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

效果:,

利用Android制作一个商品详情页“> <br/> <img src=

<强>项目结构分析

首先我们来分析一下要实现上面的效果,我们需要怎么做。顶部是一个可以滑动切换标签,可以用:viewpage +片段实现,也可以使用系统的TabLayout控件实现;而下面的视图是一个可以滑动拖动效果的视图,可以采用网上一个叫做DragLayout的控件,我这里是自己实现了一个,主要是通过对视图的事件分发的一些处理,然后滑动到下面就是一个图文详情的视图(片段),本页面包含两个界面:详情页面和参数页面;最后是评价的视图(片段)。经过上面的分析,我们的界面至少需要4个Fragement,首先来看一下项目结构:

利用Android制作一个商品详情页

<强>代码讲解

代码比较多,这里只讲解几个核心的方法类。首先我们来看一下我们自己是的这个具有阻尼效果的观点,我们知道要实现的效果,我们需要对视图的事件做一个全面的实现。这里首先说一下视图的事件分发的流程:

onInterceptTouchEvent ()→dispatchTouchEvent ()→onTouchEvent ();

首先我们需要对视图传过来的事件做一个拦截:

ensureTarget ();   如果(null==mTarget) {   返回错误;   }   如果(! isEnabled ()) {   返回错误;   }   最后一个int aciton=MotionEventCompat.getActionMasked (ev);   布尔shouldIntercept=false;   开关(aciton) {   MotionEvent。ACTION_DOWN: {   mInitMotionX=ev.getX ();   mInitMotionY=ev.getY ();   shouldIntercept=false;   打破;   }   MotionEvent。ACTION_MOVE: {   最后浮动x=ev.getX ();   最后浮动y=ev.getY ();      最后浮动xDiff=x - mInitMotionX;   最后浮动yDiff=y - mInitMotionY;      如果(canChildScrollVertically ((int) yDiff)) {   shouldIntercept=false;   其他}{   最后浮动xDiffabs=Math.abs (xDiff);   最后浮动yDiffabs=Math.abs (yDiff);      如果(yDiffabs比;mTouchSlop,,yDiffabs祝辞=xDiffabs   ,,! (mStatus==状态。近,,yDiff祝辞0   | | mStatus==状态。开放的,,yDiff & lt;0)){   shouldIntercept=true;   }   }   打破;   }   案例MotionEvent.ACTION_UP:   MotionEvent。ACTION_CANCEL: {   shouldIntercept=false;   打破;   }   }   返回shouldIntercept;

最后转发给onTouchEvent

ensureTarget ();   如果(null==mTarget) {   返回错误;   }   如果(! isEnabled ()) {   返回错误;   }   布尔wantTouch=true;   最后一个int action=MotionEventCompat.getActionMasked (ev);   开关(行动){   MotionEvent。ACTION_DOWN: {   如果(mTarget instanceof视图){   wantTouch=true;   }   打破;   }      MotionEvent。ACTION_MOVE: {   最后浮动y=ev.getY ();   最后浮动yDiff=y - mInitMotionY;   如果(canChildScrollVertically (((int) yDiff))) {   wantTouch=false;   其他}{   processTouchEvent (yDiff);   wantTouch=true;   }   打破;   }   案例MotionEvent.ACTION_UP:   MotionEvent。ACTION_CANCEL: {   finishTouchEvent ();   wantTouch=false;   打破;   }   }   返回wantTouch;

滑动事件完了之后我们需要调用请求方法对视图做一个重绘:

最终int=l;
  最后一个int右=r;
  int最高;
  int底部;
  最后一个int抵消=(int) mSlideOffset;
  看孩子;
  for (int i=0;我& lt;getChildCount ();我+ +){
  孩子=getChildAt(我);
  如果(child.getVisibility()==消失){
  继续;
  }
  如果孩子==mBehindView) {
  顶级=b +偏移量;
  底=最高+ b - t;
  其他}{
  顶级=t +偏移量;
  底=b +偏移量;
  }
  的孩子。布局(左,上,右,下);
  }

上下滑动也是涉及到两个界面:mFrontView和mBehindView,然后通过判断滑动事件来显示哪一个观点。具体看代码:

包com.xzh.gooddetail.view;
  
  进口android.animation.Animator;
  进口android.animation.AnimatorListenerAdapter;
  进口android.animation.ValueAnimator;
  进口android.content.Context;
  进口android.content.res.TypedArray;
  进口android.os.Parcel;
  进口android.os.Parcelable;
  进口android.support.v4.view.MotionEventCompat;
  进口android.support.v4.view.ViewCompat;
  进口android.util.AttributeSet;
  进口android.view.MotionEvent;
  进口android.view.View;
  进口android.view.ViewConfiguration;
  进口android.view.ViewGroup;
  进口android.widget.AbsListView;
  进口android.widget.FrameLayout;
  进口android.widget.LinearLayout;
  进口android.widget.RelativeLayout;
  
  进口com.xzh.gooddetail.R;
  
  公开课SlideDetailsLayout延伸ViewGroup {
  
  公共接口OnSlideDetailsListener {
  空白onStatusChanged(状态状态);
  }
  
  公共枚举状态{
  接近,
  开放;
  
  公共静态状态返回对象的值(int数据){
  如果(0==统计){
  返回关闭;
  }else if(1==统计){
  返回开放;
  其他}{
  返回关闭;
  }
  }
  }
  
  私有静态最终浮DEFAULT_PERCENT f=0.2;
  私有静态最终int DEFAULT_DURATION=300;
  
  私人观点mFrontView;
  私人观点mBehindView;
  
  私人mTouchSlop浮动;
  私人mInitMotionY浮动;
  私人mInitMotionX浮动;
  
  私人观点mTarget;
  私人mSlideOffset浮动;
  私人身份mStatus=Status.CLOSE;
  私人布尔isFirstShowBehindView=true;
  私人浮动mPercent=DEFAULT_PERCENT;
  私人长mDuration=DEFAULT_DURATION;
  私人int mDefaultPanel=0;
  
  私人OnSlideDetailsListener mOnSlideDetailsListener;
  
  公共SlideDetailsLayout(上下文语境){
  这(上下文,null);
  }
  
  公共SlideDetailsLayout(上下文语境,AttributeSet attrs) {
  这(上下文、attrs 0);
  }
  
  公共SlideDetailsLayout(上下文语境、AttributeSet attrs int defStyleAttr) {
  超级(上下文、attrs defStyleAttr);
  
  TypedArray=上下文。null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null

利用Android制作一个商品详情页