2

Iam は Android アプリに取り組んでおり、チャート作成に AChartEngine を使用しています。OnTouch() メソッドで画面上のタッチの座標をキャプチャすることを除いて、すべてが正常に機能しています。最初のタッチでは座標が返されず、Toast が左上隅に表示されます (Toast.setGravity() で設定)。その後のタッチでは完全に正常に機能し、初めて画面をクリックまたはタッチしたときだけではありません。どこが間違っていますか?

mChartView.setOnClickListener(new View.OnClickListener() {
             Toast test;
            public void onClick(View v) {
              SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
              v.setOnTouchListener(new OnTouchListener() {
               public boolean onTouch(View v, MotionEvent event) {

                      xaxis =  event.getX();
                      yaxis =  event.getY(); 
                      xx = (int) xaxis;
                    yy = (int) yaxis;
            return false;
                    }
                });


              if (seriesSelection != null) {

                  int status_index = seriesSelection.getSeriesIndex();
                  int equipment_index = seriesSelection.getPointIndex();
                  double duration_value = seriesSelection.getValue();

                  if(status_index == 0)
                  {
                      if(equipment_index == 0)
                      {
                          duration_value = EquipmentHoursDuration[0][1];
                      }
                      if(equipment_index == 1)
                      {
                          duration_value = EquipmentHoursDuration[1][1];
                      }
                      if(equipment_index == 2)
                      {
                          duration_value = EquipmentHoursDuration[2][1];
                      }
                      if(equipment_index == 3)
                      {
                          duration_value = EquipmentHoursDuration[3][1];
                      }
                      if(equipment_index == 4)
                      {
                          duration_value = EquipmentHoursDuration[4][1];
                      }
                      String final_status = titles[status_index];
               String final_equipment = EquipmentNamePartial[equipment_index];
                    test = Toast.makeText(
                            SalesBar.this,
                              "Status: " + final_status + '\n'
                            + " Equipment: " + final_equipment + '\n'
                            + " Duration: " + duration_value + " hours", Toast.LENGTH_SHORT);


                   test.setGravity(Gravity.TOP|Gravity.LEFT, xx, yy);

                      test.show();
                  }

                  else
                  {
                 String final_status = titles[status_index];
                 String final_equipment = EquipmentNamePartial[equipment_index];
                 if(equipment_index == 0)
              {
                  duration_value = EquipmentHoursDuration[0][0];
              }
              if(equipment_index == 1)
              {
                  duration_value = EquipmentHoursDuration[1][0];
              }
              if(equipment_index == 2)
              {
                  duration_value = EquipmentHoursDuration[2][0];
              }
              if(equipment_index == 3)
              {
                  duration_value = EquipmentHoursDuration[3][0];
              }
              if(equipment_index == 4)
              {
                  duration_value = EquipmentHoursDuration[4][0];
              }



                test = Toast.makeText(
                        SalesBar.this,
                          "Status: " + final_status + '\n'
                        + " Equipment: " + final_equipment + '\n'
                        + " Duration: " + duration_value + " hours", Toast.LENGTH_SHORT);

                     test.setGravity(Gravity.TOP|Gravity.LEFT, xx, yy);

                      test.show();
                  }
              }
            }
          });
4

3 に答える 3

3

これはあなたのコードです.....trueの代わりに戻りますfalse

 public boolean onTouch(View v, MotionEvent event) {

                      xaxis =  event.getX();
                      yaxis =  event.getY(); 
                      xx = (int) xaxis;
                    yy = (int) yaxis;
            return false;

} });

于 2012-09-28T07:01:29.863 に答える
2
mChartView.setOnTouchListener(new OnTouchListener() {

                public boolean onTouch(View v, MotionEvent event) {
                     if (MotionEvent.ACTION_DOWN == event.getAction()) {
                        xaxis =  event.getRawX();

                yaxis =  event.getRawY(); 
                xx = (int) xaxis;
                yy = (int) yaxis;
                    } else if (MotionEvent.ACTION_UP == event.getAction()) {
                        xaxis =  event.getX();
                          yaxis =  event.getY(); 
                          xx = (int) xaxis;
                        yy = (int) yaxis;
                    }
                    else{}

                    return false;
                }
            });


         mChartView.setOnClickListener(new View.OnClickListener() {
             Toast test;
            public void onClick(View v) {
              SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();




              if (seriesSelection != null) {

                  int status_index = seriesSelection.getSeriesIndex();
                  int equipment_index = seriesSelection.getPointIndex();
                  double duration_value = seriesSelection.getValue();

                  if(status_index == 0)
                  {
                      if(equipment_index == 0)
                      {
                          duration_value = EquipmentHoursDuration[0][1];
                      }
                      if(equipment_index == 1)
                      {
                          duration_value = EquipmentHoursDuration[1][1];
                      }
                      if(equipment_index == 2)
                      {
                          duration_value = EquipmentHoursDuration[2][1];
                      }
                      if(equipment_index == 3)
                      {
                          duration_value = EquipmentHoursDuration[3][1];
                      }
                      if(equipment_index == 4)
                      {
                          duration_value = EquipmentHoursDuration[4][1];
                      }
                      String final_status = titles[status_index];
                     String final_equipment = EquipmentNamePartial[equipment_index];
                    test = Toast.makeText(
                            SalesBar.this,
                              "Status: " + final_status + '\n'
                            + " Equipment: " + final_equipment + '\n'
                            + " Duration: " + duration_value + " hours", Toast.LENGTH_SHORT);



                     test.setGravity(Gravity.TOP|Gravity.LEFT, xx, yy);

                      test.show();
                  }

                  else
                  {
                 String final_status = titles[status_index];
                 String final_equipment = EquipmentNamePartial[equipment_index];
                 if(equipment_index == 0)
              {
                  duration_value = EquipmentHoursDuration[0][0];
              }
              if(equipment_index == 1)
              {
                  duration_value = EquipmentHoursDuration[1][0];
              }
              if(equipment_index == 2)
              {
                  duration_value = EquipmentHoursDuration[2][0];
              }
              if(equipment_index == 3)
              {
                  duration_value = EquipmentHoursDuration[3][0];
              }
              if(equipment_index == 4)
              {
                  duration_value = EquipmentHoursDuration[4][0];
              }



                test = Toast.makeText(
                        SalesBar.this,
                          "Status: " + final_status + '\n'
                        + " Equipment: " + final_equipment + '\n'
                        + " Duration: " + duration_value + " hours", Toast.LENGTH_SHORT);





                     test.setGravity(Gravity.TOP|Gravity.LEFT, xx, yy);

                      test.show();
                  }
              }
            }
          });
于 2012-09-28T06:20:54.630 に答える
2

最初の onClickListener を呼び出すと、最初のタッチのみが呼び出されます。その後、通常どおり onClickListener が呼び出されます。おそらく、onClickListener を onTouchListener に交換してみてください。

于 2012-09-28T05:52:08.550 に答える