当FloatingActionButton锚定到CollapsingToolbarLayout时,它会在向上滚动时消失,在某个点后向下滚动时会再次出现.我想知道你是否可以用任何类型的视图来做到这一点.在我的应用程序中,我正在尝试将ImageView锚定到CollapsingToolbarLayout,但它不会像FloatingActionButton一样消失.这是XML代码.
ImageView被锚定,但它不会像FAB那样消失并重新出现.
消失和出现View的这种行为仅与FAB
(FloatingActionButton
)相关联.你应该看一下类的源代码FloatingActionButton
.这是Behavior
类中的方法,其内部类FloatingActionButton
负责行为.
@Override public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton child, View dependency) { if (dependency instanceof Snackbar.SnackbarLayout) { updateFabTranslationForSnackbar(parent, child, dependency); } else if (dependency instanceof AppBarLayout) { // If we're depending on an AppBarLayout we will show/hide it automatically // if the FAB is anchored to the AppBarLayout updateFabVisibility(parent, (AppBarLayout) dependency, child); } return false; }
编辑
您可以扩展课程FloatingActionButton
以实现我认为您需要的.
我已扩展如下 -
/** * Sked Series, All rights Reserved * Created by Sanjeet on 06-Jan-16. */ public class FloatingActionImageView extends FloatingActionButton { public FloatingActionImageView(Context context) { super(context); } public FloatingActionImageView(Context context, AttributeSet attrs) { super(context, attrs); } public FloatingActionImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) { Bitmap sBmp; if (bmp.getWidth() != radius || bmp.getHeight() != radius) { float smallest = Math.min(bmp.getWidth(), bmp.getHeight()); float factor = smallest / radius; sBmp = Bitmap.createScaledBitmap(bmp, (int) (bmp.getWidth() / factor), (int) (bmp.getHeight() / factor), false); } else { sBmp = bmp; } Bitmap output = Bitmap.createBitmap(radius, radius, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, radius + 5, radius + 5); paint.setAntiAlias(true); paint.setFilterBitmap(true); paint.setDither(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(Color.parseColor("#BAB399")); canvas.drawCircle(radius / 2, radius / 2, radius / 2, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(sBmp, rect, rect, paint); return output; } @Override protected void onDraw(@NonNull Canvas canvas) { Drawable drawable = getDrawable(); if (drawable == null) { return; } if (getWidth() == 0 || getHeight() == 0) { return; } Bitmap b = ((BitmapDrawable) drawable).getBitmap(); Bitmap bitmap = null; if (b != null) { bitmap = b.copy(Bitmap.Config.ARGB_8888, true); } else { BitmapDrawable bitmapDrawable = null; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { bitmapDrawable = ((BitmapDrawable) getResources().getDrawable(com.sked.dd.R.drawable.ic_menu_gallery, null)); } else { bitmapDrawable = ((BitmapDrawable) getResources().getDrawable(com.sked.dd.R.drawable.ic_menu_gallery)); } if (bitmapDrawable != null) { bitmap = bitmapDrawable.getBitmap(); } } int w = getWidth(); Bitmap roundBitmap = getCroppedBitmap(bitmap, w); canvas.drawBitmap(roundBitmap, 0, 0, null); } }
这是输出 -