我的应用程序中有一些自定义控件。这些自定义控件之一包含渐变背景,我希望用户能够动态地在线性和径向渐变样式之间切换。我如何在代码中执行此操作?我的自定义控件 XAML:
<UserControl x:Class="App.tile"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}" Height="191.94" Width="406.91">
<Grid x:Name="LayoutRoot">
<Grid.Background>
<RadialGradientBrush>
<GradientStop Color="#FF092949" Offset="0"/>
<GradientStop Color="#FF06192C" Offset="1"/>
</RadialGradientBrush>
</Grid.Background>
<TextBlock HorizontalAlignment="Left" Margin="10,134,0,0" TextWrapping="Wrap" x:Name="tileTitle" Text="Project" VerticalAlignment="Top" FontSize="36"/>
</Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
我将更改其外观的代码:
private void linearRadioButton_Checked(object sender, RoutedEventArgs e)
{
// The linearRadioButton was checked, update the exampleTile
}
Run Code Online (Sandbox Code Playgroud)
多谢!
更新:
现在尝试过这个:
<phone:PhoneApplicationPage.Resources>
<LinearGradientBrush x:Key="linearBrush" StartPoint="0,0.5" EndPoint="1,0.5">
<GradientStop Color="Yellow" Offset="0.0" />
<GradientStop Color="Red" Offset="0.25" />
<GradientStop Color="Blue" Offset="0.75" />
<GradientStop Color="LimeGreen" Offset="1.0" /> …Run Code Online (Sandbox Code Playgroud) 我现在正在寻找一段时间并测试了很多东西,但没有任何效果。我有一个 TextView,它应该有渐变填充颜色和描边(不是 Textview 的背景,而是文本本身)。
我首先编写一个 GradientTextView 类。目前,我有一个带有渐变填充颜色和阴影的文本(阴影只是一个测试,也许我稍后需要一个。此时描边很重要)。但是,当我尝试添加描边时,仅显示描边或渐变填充颜色。我尝试了很多东西,例如 这里的解决方案。
import com.qualcomm.QCARSamples.ImageTargets.R;
import com.qualcomm.QCARSamples.ImageTargets.R.color;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Shader;
import android.graphics.Shader.TileMode;
import android.graphics.SweepGradient;
import android.util.AttributeSet;
import android.widget.TextView;
public class GradientTextView extends TextView
{
public GradientTextView( Context context )
{
super( context, null, -1 );
}
public GradientTextView( Context context,
AttributeSet attrs )
{
super( context, attrs, -1 );
}
public GradientTextView( Context context,
AttributeSet attrs, int defStyle ) …Run Code Online (Sandbox Code Playgroud) 我想从 CSS 创建一个带有渐变边框和 1px 内部阴影的渐变箭头形状按钮。
我创建了一个图像来显示按钮和样式规则:

这是我到目前为止所拥有的:
.button {
color: #FFF;
background-color: #D02180 !important;
background: -webkit-gradient(linear, 0 0, 0 100%, from(#f84aa4), to(#d02181));
background: -webkit-linear-gradient(#f84aa4, #d02181);
background: -moz-linear-gradient(#f84aa4, #d02181);
background: -o-linear-gradient(#f84aa4, #d02181);
background: linear-gradient(#f84aa4, #d02181);
padding: 5px 10px;
border-radius: 6px;
-moz-border-radius: 6px;
-webkit-border-radius: 6px;
border: 1px solid #ab1465;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4) inset;
}Run Code Online (Sandbox Code Playgroud)
<a class="button">Next</a>Run Code Online (Sandbox Code Playgroud)
跨浏览器支持是一个主要的事情,所以如果一切都可以从 CSS 完成(除了渐变边框),那也是可以的。在这种情况下,边框将具有一种简单的颜色 - #ab1465。
主要问题始于梯度。我可以借助 css 伪元素制作箭头形状,但我需要一种跨浏览器解决方案来为整个箭头形状提供一个连续渐变。
这个问题困扰了我一段时间,我不确定是否有答案。我知道有像 Love2D 这样的模块可以完成渐变,我猜它使用 RGB 着色。然而,我需要使用 xterm 256 颜色找到非常相似的东西,但我似乎无法在任何地方找到渐变贴图来帮助实现这一点。
我的猜测是,我必须创建一个“最接近 RGB 颜色”并从中创建一个渐变,将相应的 RBG 与最近的 xterm 匹配相匹配,但说实话,我什至不知道从哪里开始这。我知道Python中有一个“将xterm转换为RGB十六进制”脚本(位于此处),但由于我不了解Python,所以我不知道如何将其转换为Lua。
最终,我想做的是能够将文本或多或少地变成彩虹渐变。我目前有一个返回 xterm 颜色的函数,但它是完全随机的,并且输出可能有点难以阅读。这是我对该代码的内容。代表@x“转换为 xterm 颜色”,后面跟着一个三位数代码(001 到 255),然后是文本。
function rainbow(text)
local rtext = ""
local xcolor = 1
local sbyte = 1
for i = 1, #text do
math.randomseed(os.time() * xcolor * sbyte)
sbyte = string.byte(i)
xcolor = math.random(1, 255)
rtext = rtext .. "@x" .. string.rep("0", 3 - string.len(xcolor)) .. xcolor .. text:sub(i,i)
end
return rtext
end
Run Code Online (Sandbox Code Playgroud)
因此,例如,print(rainbow("Test"))会导致:
@x211T@x069e@x154s@x177t …
我想使用UIBazierpath渐变色填充圆的一半边框。
最初我尝试使用完整的圆圈但它不起作用,渐变总是填充圆圈而不是边框。有没有办法做到这一点?
这是我到目前为止所拥有的:
let path = UIBezierPath(roundedRect: rect, cornerRadius: rect.width/2)
let shape = CAShapeLayer()
shape.path = path.cgPath
shape.lineWidth = 2.0
shape.strokeColor = UIColor.black.cgColor
self.layer.addSublayer(shape)
let gradient = CAGradientLayer()
gradient.frame = path.bounds
gradient.colors = [UIColor.magenta.cgColor, UIColor.cyan.cgColor]
let shapeMask = CAShapeLayer()
shapeMask.path = path.cgPath
gradient.mask = shapeMask
shapeMask.lineWidth = 2
self.layer.addSublayer(gradient)
Run Code Online (Sandbox Code Playgroud)
我在设置渐变颜色以在集合视图中查看时遇到此问题
当它第一次绘制时很好。但是当我选择一些选项并重新加载集合时,它会像第二张图片一样发生。
viccalexander/变色龙 ( https://github.com/viccalexander/Chameleon )
自从我将我的设备更新为 android 10 以来,我的背景渐变之一面临着一个奇怪的问题。
我有一个带有渐变背景的 RelativeLayout 看起来像这样。
<RelativeLayout
android:id="@+id/layoutSpeedLegend"
android:layout_width="match_parent"
android:layout_height="18dp"
android:background="@drawable/background"/>
Run Code Online (Sandbox Code Playgroud)
我的 background.xml 看起来像这样。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<gradient
android:centerColor="@color/yellow"
android:endColor="@color/red"
android:startColor="@color/darkgreen"
android:centerX="50%"/>
<corners android:radius="15dp" />
</shape>
</item>
Run Code Online (Sandbox Code Playgroud)
添加android:angle="90"到我的 background.xml 也不起作用。
有人知道为什么会这样吗?
我有一个文本,我想设置一个渐变颜色作为它的前景。我可以用 XML 来做吗?
还是应该在活动中进行?我正在 Android Studio 中使用 Kotlin 进行编程。
<androidx.constraintlayout.widget.ConstraintLayout xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:gravity="center"
android:text="Text Color is Gradient"
android:textColor="#000"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<gradient
android:angle="90"
android:centerColor="#555994"
android:endColor="#b5b6d2"
android:startColor="#555994"
android:type="linear" />
<corners
android:radius="0dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)
我的活动是这样的:
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
Run Code Online (Sandbox Code Playgroud) 下面是我要构建的用户界面,
目前,我已经使用线性渐变来实现这一点。但问题是当我在 Box Decoration 中使用 image 时,线性渐变消失了。
下面是代码,
child: Container(
padding: EdgeInsets.all(10.0),
height: 180,
child: Container(
padding: EdgeInsets.all(10.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(20)),
boxShadow: [
BoxShadow(
color: ColorSet.primaryGrey,
blurRadius: 5,
offset: Offset(0, 7),
),
],
gradient: LinearGradient(
colors: [ColorSet.primaryRed, Colors.transparent, Colors.transparent, ColorSet.primaryRed],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
stops: [0, 0, 0.6, 1],
),
//On uncommenting the below three lines, I do not see the linear gradient
// image: DecorationImage(
// image: AssetImage("lib/assets/images/event.jpg"),
// fit: BoxFit.cover,
// ),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween, …Run Code Online (Sandbox Code Playgroud)