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

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

如果你已经在纸上稍微的画了dst的四个点,那么这个结果你一定不陌生。
可以看到我们通过matrix.setPolyToPoly实现了图片的倾斜,那么引入到折叠的情况,假设折叠两次,大家有思路么,考虑一下,没有的话,继续往下看。

三、引入阴影
其实阴影应该在实现初步的折叠以后来说,这样演示其实比较方便,但是为了降低其理解的简单性,我们先把阴影抽取出来说。
假设我们现在要给上图加上阴影,希望的效果图是这样的:

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

可以看到我们左侧加入了一点阴影,怎么实现呢?
主要还是利用LinearGradient,我们从左到右添加一层从黑色到透明的渐变即可。

public class MatrixPolyToPolyWithShadowActivity extends Activity 
{ 
 
  @Override 
  protected void onCreate(Bundle savedInstanceState) 
  { 
    super.onCreate(savedInstanceState); 
    setContentView(new PolyToPolyView(this)); 
 
  } 
 
  class PolyToPolyView extends View 
  { 
 
    private Bitmap mBitmap; 
    private Matrix mMatrix; 
     
    private Paint mShadowPaint; 
    private Matrix mShadowGradientMatrix; 
    private LinearGradient mShadowGradientShader; 
 
    public PolyToPolyView(Context context) 
    { 
      super(context); 
      mBitmap = BitmapFactory.decodeResource(getResources(), 
          R.drawable.tanyan); 
      mMatrix = new Matrix(); 
 
      mShadowPaint = new Paint(); 
      mShadowPaint.setStyle(Style.FILL); 
      mShadowGradientShader = new LinearGradient(0, 0, 0.5f, 0, 
          Color.BLACK, Color.TRANSPARENT, TileMode.CLAMP); 
      mShadowPaint.setShader(mShadowGradientShader); 
 
      mShadowGradientMatrix = new Matrix(); 
      mShadowGradientMatrix.setScale(mBitmap.getWidth(), 1); 
      mShadowGradientShader.setLocalMatrix(mShadowGradientMatrix); 
      mShadowPaint.setAlpha((int) (0.9*255)); 
 
    } 
 
    @Override 
    protected void onDraw(Canvas canvas) 
    { 
      super.onDraw(canvas); 
      canvas.save(); 
      float[] src = //...; 
      float[] dst = //...; 
      mMatrix.setPolyToPoly(src, 0, dst, 0, src.length >> 1); 
 
      canvas.concat(mMatrix); 
      canvas.drawBitmap(mBitmap, 0, 0, null); 
      //绘制阴影                                                            canvas.drawRect(0, 0, mBitmap.getWidth(), mBitmap.getHeight(), 
          mShadowPaint); 
      canvas.restore(); 
 
    } 
 
  } 
 
}