Guest User

Untitled

a guest
May 23rd, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.68 KB | None | 0 0
  1. package com.accucia.mym.util;
  2.  
  3. import android.annotation.TargetApi;
  4. import android.content.Context;
  5. import android.graphics.Canvas;
  6. import android.graphics.Paint;
  7. import android.graphics.Path;
  8. import android.graphics.PorterDuff;
  9. import android.graphics.PorterDuffXfermode;
  10. import android.graphics.Xfermode;
  11. import android.os.Build;
  12. import android.util.AttributeSet;
  13. import android.util.TypedValue;
  14. import android.widget.RelativeLayout;
  15.  
  16. /**
  17. * Created by accucia on 18/5/18.
  18. */
  19.  
  20. public class CutLayout extends RelativeLayout {
  21.  
  22. private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
  23. private Xfermode pdMode = new PorterDuffXfermode(PorterDuff.Mode.CLEAR);
  24. private Path path = new Path();
  25.  
  26. public CutLayout(Context context) {
  27. super(context);
  28. }
  29. public CutLayout(Context context, AttributeSet attrs) {
  30. super(context, attrs);
  31. }
  32.  
  33. public CutLayout(Context context, AttributeSet attrs, int defStyleAttr) {
  34. super(context, attrs, defStyleAttr);
  35. }
  36.  
  37. @TargetApi(Build.VERSION_CODES.LOLLIPOP)
  38. public CutLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
  39. super(context, attrs, defStyleAttr, defStyleRes);
  40. }
  41. @Override
  42. protected void dispatchDraw(Canvas canvas) {
  43. int saveCount = canvas.saveLayer(0, 0, getWidth(), getHeight(), null, Canvas.ALL_SAVE_FLAG);
  44. super.dispatchDraw(canvas);
  45. paint.setXfermode(pdMode);
  46. path.reset();
  47. // path.moveTo(0, getHeight() - TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, getResources().getDisplayMetrics()));
  48. path.moveTo(0, getHeight());
  49. path.lineTo(getWidth(), getHeight());
  50. path.lineTo(getWidth(), getHeight() - TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60, getResources().getDisplayMetrics()));
  51.  
  52. // change value (50) to change the the slope.50 means 50dp.
  53. // path.lineTo(getWidth()/2, getHeight());
  54.  
  55.  
  56. // path.moveTo(0,0); // (0,0)
  57. // path.lineTo(getPx(50),0); // (50,0)
  58. // path.lineTo(0,getPx(50)); // (0,50)
  59. //
  60. // path.lineTo(0,getHeight()-getPx(50)); // (0,H-50)
  61. // path.lineTo(getPx(50),getHeight()); // (50,H)
  62. // path.lineTo(0,getHeight()); // (0,H)
  63. //
  64. // path.lineTo(0,0); // (0,0)
  65. // path.lineTo(getWidth()-getPx(50),0); // (W-50,0)
  66. // path.lineTo(getWidth(),getPx(50)); // (W,50)
  67. // path.lineTo(getWidth(),0); // (W,0)
  68. //
  69. // path.lineTo(getWidth(),getHeight()-getPx(50)); // (W,H-50)
  70. // path.lineTo(getWidth()-getPx(50),getHeight()); // (W-50,H)
  71. // path.lineTo(getWidth(),getHeight()); // (W,H)
  72. // path.lineTo(getWidth(),0); // (W,0)
  73.  
  74.  
  75. path.close();
  76. canvas.drawPath(path, paint);
  77. canvas.restoreToCount(saveCount);
  78. paint.setXfermode(null);
  79. }
  80.  
  81. private float getPx(int i) {
  82. return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, i, getResources().getDisplayMetrics());
  83. }
  84. }
  85.  
  86.  
  87. in xml:
  88. <com.accucia.mym.util.CutLayout
  89. android:layout_width="match_parent"
  90. android:layout_height="200dp"
  91. android:id="@+id/logoCard"
  92.  
  93. >
  94.  
  95. <ImageView
  96. android:layout_width="match_parent"
  97. android:layout_centerHorizontal="true"
  98. android:layout_height="match_parent"
  99. android:background="@color/colorAccent"
  100. android:scaleType="fitXY"/>
  101.  
  102.  
  103. </com.accucia.mym.util.CutLayout>
Add Comment
Please, Sign In to add comment