1

私は achartengine を使用しており、チャートを長押ししたときにアクション バーでアクション モードを有効にしたいと考えています。しかし、OnLongClickListener が機能していません。ほぼすべてを試しましたが、機能させることができず、その理由もわかりません。これが私のコードです:

mChartView.setLongClickable(true);
mChartView.setOnLongClickListener(new OnLongClickListener() {

        @Override
        public boolean onLongClick(View v) {
            Log.i("ClickListener", "CLICK");
            return false;
        }

});

しかし、イベントが呼び出されることはありません。チャートはスクロール可能ですが、意味がないためだと思います。OnClick を試してみましたが、うまくいきません。動作しているのは OnTouch だけですが、長押しの動作が得られません。

編集:

または、タッチスクリーンの状態の実際の状態を取得する方法があるかもしれません。この方法では、たとえば 1000mS に達するまで「タイマー」を置くことができますが、タッチスクリーンがタッチされている間だけです。現在の状態に関係なく、イベントが発生したときのタッチスクリーンの状態。

わかりました、ここに折れ線グラフのコードがあります:

private static XYSeries input1;
private static XYMultipleSeriesDataset mDataset;
private static XYSeriesRenderer renderer1;
private static XYMultipleSeriesRenderer mRenderer;
private static GraphicalView mChartView;

mRenderer = new XYMultipleSeriesRenderer();
        renderer1 = new XYSeriesRenderer();

        mRenderer.setOrientation(Orientation.HORIZONTAL);
        mRenderer.addSeriesRenderer(renderer1);
        mRenderer.setXAxisMax(10);
        mRenderer.setYAxisMax(10);
        mRenderer.setAxesColor(Color.WHITE);
        mRenderer.setLabelsColor(Color.WHITE);
        mRenderer.setShowGrid(true);

        input1 = new XYSeries("Linea");

        mDataset = new XYMultipleSeriesDataset();
        mDataset.addSeries(input1);

        renderer1.setColor(Color.WHITE);

        input1.add(4, 7);   
        input1.add(7, 3);   
        input1.add(8, 6);   
        input1.add(9, 2);

        mChartView = ChartFactory.getLineChartView(this, mDataset, mRenderer);
        setContentView(mChartView);

        mChartView.setLongClickable(true);
        mChartView.setOnLongClickListener(new OnLongClickListener() {

            @Override
            public boolean onLongClick(View v) {
                Log.i("Click", "LONG CLICKED CHART");
                return false;
            }

        });

グラフをスライドするとロングクリックとしても取得されることに気付いたので、onTouch でロングクリックを実行しようとしています。

4

2 に答える 2

2

onTouchListener() と一緒にランナブルを使用して、onLongClick() と同じ効果を得ることができます。このような何かがそれを行う必要があります:

boolean fingerStillDown = false;
final Runnable longClickRun = new Runnable(){
   public void run(){
       if(fingerStillDown){
           Log.i("CHARTS!", "LONGCLICK!");
       }
   }
 };
 mChartView.setOnTouchListener(new OnTouchListener() {
     public boolean onTouch(View v, MotionEvent me){
         if(me.getAction() == MotionEvent.ACTION_DOWN){
              fingerStillDown = true;
              //The system registers longclick at ~500ms.
              mChartView.postDelayed(longClickRun, 500);
         }

         if(me.getAction() == MotionEvent.ACTION_UP){
             fingerStillDown = false;
         }


         return false; //<-- I didn't test with true, but I suspect returning true
                       // would break the scrolling.
         }
  });
于 2012-07-03T00:13:14.250 に答える
0

false ではなくtrueを返すようにしてください。そのようにして、要素が長押しされたため、イベントが処理されました。

mChartView.setOnLongClickListener(new OnLongClickListener() {

        @Override
        public boolean onLongClick(View v) {
            Log.i("ClickListener", "CLICK");
            return true;
        }

});
于 2012-07-02T23:48:42.670 に答える