如何设置“绝对”区域渐变?

时间:2012-12-23 21:40:09

标签: java android teechart

见下图。渐变绘制不正确,垂直黑线只是丑陋。

  1. 如何创建从min延伸到max的渐变?例如。如果我的比例从0到100,我希望我的区域使用这些0..100梯度值中的N.
  2. 如何删除垂直黑线?
  3. Bad gradient

    更新:提供的答案有效,但我收到此工件:

    Artifact

    更新2:只有在使用一个LinearLayout时才会发生这种情况,如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/chart_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="3dip" >
    
        <Spinner
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
        <Spinner
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
        <Spinner
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
    </LinearLayout>
    

    然后TChart被添加到chart_layout。巴姆!偏移误差:)

2 个答案:

答案 0 :(得分:1)

  

如何创建从最小到最大延伸的渐变?例如。如果我的比例从0到100,我希望我的区域使用这些0..100梯度值中的N.

     

我希望渐变从最小值变为最大值(在这种情况下为0到100)。因此在上图中,80处的点将具有第80个渐变颜色(几乎为绿色)。 50处的点将具有第50个渐变颜色(黄色)。我相信你需要一个新的渐变类型:SYMMETRICRECTGRADIENT

“区域”系列在下一个之前绘制段,并在每个段下方的区域中绘制每个段。这就是Area系列无法绘制均匀渐变的原因。但是,TeeChart的其他版本具有GradientRelative,它在您设置为false时执行您请求的操作。我已经在愿望清单中添加了为Java版本(TJ71016477)实现此属性(以及相关函数)的可能性。

同时,您可以使用SeriesBand工具来完成它。这是一个例子:

    tChart1.getAspect().setView3D(false);
    tChart1.getLegend().setVisible(false);

    Area area1 = new Area(tChart1.getChart());
    area1.fillSampleValues();
    area1.setOrigin(0);
    area1.setUseOrigin(true);
    area1.getAreaLines().setVisible(false);

    area1.getGradient().setVisible(false);
    area1.setColor(Color.transparent);

    SeriesBand band1 = new SeriesBand(tChart1.getChart());
    band1.setSeries(area1);
    band1.getGradient().setVisible(true);
    band1.getGradient().setDirection(GradientDirection.VERTICAL);
    band1.getGradient().setStartColor(Color.green);
    band1.getGradient().setMiddleColor(Color.yellow);
    band1.getGradient().setUseMiddle(true);
    band1.getGradient().setEndColor(Color.red);

这是我上面的代码所得到的:

Area with SeriesBand tool to show a uniform gradient

更新:我已经复制了奇怪的工件问题。我已添加到愿望清单中进一步调查(TJ71016541)。 同时,仅为图表使用第二个LinearLayout似乎工作正常。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="3dip" >

    <Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <LinearLayout 
        android:id="@+id/chart_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" />
</LinearLayout>

正如评论中所述,另一种方法是隐藏区域线并使SeriesBand笔可见:

area1.getLinePen().setVisible(false);
band1.getPen().setVisible(true);

答案 1 :(得分:0)

如何创建从最小到最大延伸的渐变?例如。如果我 有一个从0到100的比例我希望我的区域使用这些0..100中的N. 梯度值。

我担心不可能使用0 ... 100渐变取决于比例,所以区域的渐变使用开始,中间和结束颜色分布在整个区域以绘制渐变。

如何删除垂直黑线?

要删除垂直黑线,只需设置false区域线。

我希望能有所帮助。

谢谢,