1

ユーザーからの入力のグラフを表示するアプリを作成しています。グラフは、いくつかのライブラリを使用して線形レイアウトで描画されます.ユーザーが描画ボタンをクリックするたびに、ユーザーが要求した新しい関数を線形レイアウトで再描画したい..layout.invalidate()を使用してみましたが、これは機能しません私のアプリで.助けてください..以下はコードスニペットです:

bb.setOnClickListener(new OnClickListener()
{
 public void onClick(View v)
    {
       String text = ee.getText().toString(); // getting the user expression input
       LinearLayout layout = (LinearLayout) findViewById(R.id.graph2);
       layout.setVisibility(View.INVISIBLE);

       Expression data = Expression.createExpression(text) ;

       if(text == ""){
           Toast.makeText(getApplicationContext(), "please enter a valid equation", Toast.LENGTH_LONG).show();
            layout.setVisibility(View.INVISIBLE);
           }
       else
           { 
               draw(data) ; 
               layout.setVisibility(View.VISIBLE);
               layout.invalidate();
           }                                                       
         } 
       });

public void draw(Expression x)
    {
        final GraphView graphing = new LineGraphView(this, "sketch");
        int num = 350;
        GraphViewData[] array = new GraphViewData[num];
        double w=0;
        for (int i=0; i<num; i++) {
           w += 0.2;
           array[i] = new GraphViewData(i, x.evaluate(w,0,0));  }


        // add data
        graphing.addSeries(new GraphViewSeries(array));
        // set view port, start=2, size=40
        graphing.setViewPort(0, 120);
        graphing.getGraphViewStyle().setNumHorizontalLabels(2);
        graphing.setScrollable(true);
        // optional - activate scaling / zooming
        graphing.setScalable(true);

        LinearLayout layout = (LinearLayout) findViewById(R.id.graph2);
        layout.addView(graphing);
        layout.invalidate();
    }
4

1 に答える 1

0

初め:

graphing.setViewPort(0, 120);

それが正しいか?ビューの幅を 0 に設定しているように見えます。

次に、レイアウトから古いビューを削除して古い結果を破棄したくないですか?

最後に、子ビューを追加または削除するとレイアウトが自動的に無効になります。

于 2014-01-29T16:57:47.950 に答える