Android中FoldingLayout折叠布局的用法及实战全攻略

2019-12-10 18:55:43于丽

当然了,此时只是静态的,但是我们成功的完成了绘制一个静态图到FlodLayout。
接下来我们为其增加手指的触摸折叠功能。

六、TouchFoldLayout
1、实现
增加触摸功能其实很简单,我们的绘制依赖mFactor这个值,我们只要在onTouchEvent里面去累加手指移动距离,然后动态更新这个值就可以了。

package com.zhy.view; 
 
import android.content.Context; 
import android.graphics.Canvas; 
import android.util.AttributeSet; 
import android.view.GestureDetector; 
import android.view.MotionEvent; 
 
public class TouchFoldLayout extends FoldLayout 
{ 
 
  private GestureDetector mScrollGestureDetector; 
 
  public TouchFoldLayout(Context context, AttributeSet attrs) 
  { 
    super(context, attrs); 
    init(context, attrs); 
  } 
 
  public void init(Context context, AttributeSet attrs) 
  { 
    mScrollGestureDetector = new GestureDetector(context, 
        new ScrollGestureDetector()); 
 
  } 
 
  @Override 
  public boolean onTouchEvent(MotionEvent event) 
  { 
    return mScrollGestureDetector.onTouchEvent(event); 
  } 
 
  private int mTranslation = -1; 
 
  @Override 
  protected void dispatchDraw(Canvas canvas) 
  { 
    if (mTranslation == -1) 
      mTranslation = getWidth(); 
    super.dispatchDraw(canvas); 
  } 
 
  class ScrollGestureDetector extends GestureDetector.SimpleOnGestureListener 
  { 
    @Override 
    public boolean onDown(MotionEvent e) 
    { 
      return true; 
    } 
 
    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, 
        float distanceX, float distanceY) 
    { 
      mTranslation -= distanceX; 
 
      if (mTranslation < 0) 
      { 
        mTranslation = 0; 
      } 
      if (mTranslation > getWidth()) 
      { 
        mTranslation = getWidth(); 
      } 
 
      float factor = Math.abs(((float) mTranslation) 
          / ((float) getWidth())); 
 
      setFactor(factor); 
 
      return true; 
    } 
  } 
 
} 

我们选择继承FoldLayout,重写其onTouchEvent,然后通过mScrollGestureDetector获取移动的距离,最终和width做比值得到我们的factor,然后调用setFactor进行改变。

public void setFactor(float factor) 
{ 
  this.mFactor = factor; 
  updateFold(); 
  invalidate(); 
}