Я думаю, что наилучшим способом было бы подойти к вопросу, используя
android.graphics
пакет. Создайте свое собственное растровое изображение, нарисуйте поверх Canvas с помощью Paint, который имеет один тип линейного градиента шейдера в верхней части изображения, а другой - в нижней части. Для более сложных эффектов вы можете использовать размытие или тиснение маски, комбинировать различные типы градиентов (например, линейный и радиальный), получать хорошие результаты с помощью комбинаций режимов XFer из двух растровых изображений или применять разные цветовые фильтры.
Я сделал простой пример:
используя код ниже. Размытие было добавлено, чтобы смазать края.
Bitmap bmResult = Bitmap.createBitmap(buttonWidth, buttonHeight, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmResult);
Paint paint = new Paint();
paint.setShader(new LinearGradient (0, 0, 0, bmResult.getHeight()/2, 0xFF284560, 0xFF284060, TileMode.MIRROR));
canvas.drawPaint(paint);
paint.setShader(new LinearGradient (0, 0, 0, bmResult.getHeight()/2, 0x55FFFFFF, 0x22FFFFFF, TileMode.CLAMP));
paint.setMaskFilter(new BlurMaskFilter(3, BlurMaskFilter.Blur.NORMAL));
canvas.drawRect(0, 0, bmResult.getWidth(), bmResult.getHeight()/2, paint);