/** * @description 卷帘门效果的View */ public class RollerShutterDoorView extends AppCompatImageView { private boolean roller; public RollerShutterDoorView(@NonNull Context context) { super(context); init(); } public RollerShutterDoorView(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(); } public RollerShutterDoorView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { setLayerType(View.LAYER_TYPE_SOFTWARE, null); roller = false; rect = new Rect(0, 0, 0, 0); paint = new Paint(); paint.setAntiAlias(true); paint.setColor(ContextCompat.getColor(getContext(), R.color.transparent)); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); } private Rect rect; private Paint paint; @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (roller) { canvas.drawRect(rect, paint); } } /** * 和某个view绑定: */ public void bindView(final View view) { if (view == null) { return; } if (view.getVisibility() == View.GONE) { // 注意:gone的状态获取不到buildDrawingCache view.setVisibility(View.INVISIBLE); } view.post(new Runnable() { @Override public void run() { Bitmap bitmapFromView = getBitmapFromView(view); if (bitmapFromView != null) { roller = false; setImageBitmap(bitmapFromView); } } }); } private Bitmap getBitmapFromView(View view) { view.destroyDrawingCache(); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); return view.getDrawingCache(); } public void roller(int rollerHeight) { if (rollerHeight <= getHeight()) { roller = true; rect.set(0, getHeight() - rollerHeight, getWidth(), getHeight()); invalidate(); } } }
Android仿高德卷帘门效果的View
最新推荐文章于 2021-05-30 07:52:51 发布