利用Android制作一个商品详情页-创新互联

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

创新互联建站是一家专业提供青岛企业网站建设,专注与网站建设、成都网站建设HTML5、小程序制作等业务。10年已为青岛众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。

效果: 

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

项目结构分析

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

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

代码讲解

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

onInterceptTouchEvent()–>dispatchTouchEvent()–>onTouchEvent();

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

ensureTarget();
  if (null == mTarget) {
   return false;
  }
  if (!isEnabled()) {
   return false;
  }
  final int aciton = MotionEventCompat.getActionMasked(ev);
  boolean shouldIntercept = false;
  switch (aciton) {
   case MotionEvent.ACTION_DOWN: {
    mInitMotionX = ev.getX();
    mInitMotionY = ev.getY();
    shouldIntercept = false;
    break;
   }
   case MotionEvent.ACTION_MOVE: {
    final float x = ev.getX();
    final float y = ev.getY();

    final float xDiff = x - mInitMotionX;
    final float yDiff = y - mInitMotionY;

    if (canChildScrollVertically((int) yDiff)) {
     shouldIntercept = false;
    } else {
     final float xDiffabs = Math.abs(xDiff);
     final float yDiffabs = Math.abs(yDiff);

     if (yDiffabs > mTouchSlop && yDiffabs >= xDiffabs
       && !(mStatus == Status.CLOSE && yDiff > 0
       || mStatus == Status.OPEN && yDiff < 0)) {
      shouldIntercept = true;
     }
    }
    break;
   }
   case MotionEvent.ACTION_UP:
   case MotionEvent.ACTION_CANCEL: {
    shouldIntercept = false;
    break;
   }
  }
  return shouldIntercept;

网站栏目:利用Android制作一个商品详情页-创新互联
网页链接:http://scyanting.com/article/dojcic.html