将包含渐变的可绘制对象 xml 转换为位图
convert drawable xml containing a gradient to bitmap
我想对位图应用渐变。到目前为止,我正在使用这种技术。
这是我在 MainActivity.class.
的 onCreate 方法中的代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
double angle = Math.toRadians(135);
double length = 100;
int x = (int) (Math.cos(angle) * length);
int y = (int) (Math.sin(angle) * length);
int[] colors = new int[3];
colors[0] = Color.parseColor("#FF4081");
colors[1] = Color.parseColor("#3F51B5");
Bitmap bitmap = Bitmap.createBitmap(1080, 1080, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
LinearGradient linearGradient =
new LinearGradient(0, 0, x, y, colors[1], colors[0], Shader.TileMode.CLAMP);
Paint paint = new Paint();
paint.setDither(true);
paint.setShader(linearGradient);
canvas.drawRect(new RectF(0, 0, 1080, 1080), paint);
ImageView imageView = findViewById(R.id.iv);
imageView.setImageBitmap(bitmap);
}
}
这导致了这个
但是我想要这样的效果
图像 2 的结果是通过简单地使用以下代码创建一个可绘制的 XML 文件来实现的
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="45"
android:endColor="@color/colorPrimary"
android:startColor="@color/colorAccent" />
</shape>
并将其设置为 ImageView 的背景,但我希望对位图产生这种效果,因为我想将该位图作为图像保存在本地。我已经尝试在 MainActivity 中创建一个 GradientDrawable 实例并在
中提到的 GradientDrawable 上调用 onDraw(canvas)
据我所知,你计算的角度不正确。
而不是这个
LinearGradient linearGradient =
new LinearGradient(0, 0, x, y, colors[1], colors[0], Shader.TileMode.CLAMP);
使用这个
LinearGradient linearGradient =
new LinearGradient(1080, 0, 0, 1080, colors[1], colors[0], Shader.TileMode.CLAMP);
x0为梯度起点X,y0为梯度起点Y,x1为梯度终点X,y1为梯度终点Y。
希望对你有所帮助。
我想对位图应用渐变。到目前为止,我正在使用这种技术。 这是我在 MainActivity.class.
的 onCreate 方法中的代码public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
double angle = Math.toRadians(135);
double length = 100;
int x = (int) (Math.cos(angle) * length);
int y = (int) (Math.sin(angle) * length);
int[] colors = new int[3];
colors[0] = Color.parseColor("#FF4081");
colors[1] = Color.parseColor("#3F51B5");
Bitmap bitmap = Bitmap.createBitmap(1080, 1080, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
LinearGradient linearGradient =
new LinearGradient(0, 0, x, y, colors[1], colors[0], Shader.TileMode.CLAMP);
Paint paint = new Paint();
paint.setDither(true);
paint.setShader(linearGradient);
canvas.drawRect(new RectF(0, 0, 1080, 1080), paint);
ImageView imageView = findViewById(R.id.iv);
imageView.setImageBitmap(bitmap);
}
}
这导致了这个
但是我想要这样的效果
图像 2 的结果是通过简单地使用以下代码创建一个可绘制的 XML 文件来实现的
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="45"
android:endColor="@color/colorPrimary"
android:startColor="@color/colorAccent" />
</shape>
并将其设置为 ImageView 的背景,但我希望对位图产生这种效果,因为我想将该位图作为图像保存在本地。我已经尝试在 MainActivity 中创建一个 GradientDrawable 实例并在
据我所知,你计算的角度不正确。
而不是这个
LinearGradient linearGradient =
new LinearGradient(0, 0, x, y, colors[1], colors[0], Shader.TileMode.CLAMP);
使用这个
LinearGradient linearGradient =
new LinearGradient(1080, 0, 0, 1080, colors[1], colors[0], Shader.TileMode.CLAMP);
x0为梯度起点X,y0为梯度起点Y,x1为梯度终点X,y1为梯度终点Y。
希望对你有所帮助。