2014-01-30 5 views
1

Я использую график Android для построения моей динамической даты. Может ли кто-нибудь сказать мне, как я могу изменить ширину синусоидальной волны на рисунке ниже.Изменение ширины синусоидальной волны в Android-плане

enter image description here

Я использую пример кода для Dynamic XY Plot.

И приведенный ниже код - это моя деятельность.

public class MyActivity extends Activity { 

// redraws a plot whenever an update is received: 
private class MyPlotUpdater implements Observer { 
    Plot plot; 
    public MyPlotUpdater(Plot plot) { 
     this.plot = plot; 
    } 
    @Override 
    public void update(Observable o, Object arg) { 
     try { 
      plot.postRedraw(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 
     } 
    } 
} 

private XYPlot dynamicPlot; 
private XYPlot staticPlot; 
private MyPlotUpdater plotUpdater; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    // android boilerplate stuff 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // get handles to our View defined in layout.xml: 
    dynamicPlot = (XYPlot) findViewById(R.id.dynamicPlot); 

    plotUpdater = new MyPlotUpdater(dynamicPlot); 

    // only display whole numbers in domain labels 
    dynamicPlot.getGraphWidget().setDomainValueFormat(new DecimalFormat("0")); 

    // getInstance and position datasets: 
    SampleDynamicXYDatasource data = new SampleDynamicXYDatasource(); 
    SampleDynamicSeries sine1Series = new SampleDynamicSeries(data, 0, "Sine 1"); 
    SampleDynamicSeries sine2Series = new SampleDynamicSeries(data, 1, "Sine 2"); 

    dynamicPlot.addSeries(sine1Series, new LineAndPointFormatter(Color.rgb(0, 0, 0), null, Color.rgb(0, 80, 0))); 

    // create a series using a formatter with some transparency applied: 
    LineAndPointFormatter f1 = new LineAndPointFormatter(Color.rgb(0, 0, 200), null, Color.rgb(0, 0, 80)); 
    f1.getFillPaint().setAlpha(220); 
    dynamicPlot.addSeries(sine2Series, f1); 
    dynamicPlot.setGridPadding(5, 0, 5, 0); 

    // hook up the plotUpdater to the data model: 
    data.addObserver(plotUpdater); 

    dynamicPlot.setDomainStepMode(XYStepMode.SUBDIVIDE); 
    dynamicPlot.setDomainStepValue(sine1Series.size()); 

    // thin out domain/range tick labels so they dont overlap each other: 
    dynamicPlot.setTicksPerDomainLabel(5); 
    dynamicPlot.setTicksPerRangeLabel(3); 
    dynamicPlot.disableAllMarkup(); 

    // freeze the range boundaries: 
    dynamicPlot.setRangeBoundaries(-100, 100, BoundaryMode.FIXED); 

    // kick off the data generating thread: 
    new Thread(data).start(); 
} 

}

+0

Пожалуйста, покажите нам какой-нибудь код, в идеале - часть, в которой вы вычисляете значение Y для заданного значения Х. –

+0

Уже данный учебник используется в вопросе. –

+0

Ну, это зависит от вас, как легко или сложно сделать это для ваших читателей, чтобы помочь вам, и какой ответ вы рисуете с этим. Как бы то ни было, чтобы помочь вам, нужно продумать полный учебник, чтобы найти нужный фрагмент кода. –

ответ

1

В файле SampleDynamicXYDatasource.java вы можете найти линию

double amp = sinAmp * Math.sin(index + phase + 4); 

Там генерируется синусоида. Задерживая индекс (например, умножая его на 0,5), вы можете сделать период синусоидальной волны более крупным или в графическом выражении масштабировать его по оси x.

+0

Прохладный .... Спасибо, Бра .. Он работает .. –