2

このトピックに関して多くの質問があることは承知しています。それらのほとんどを見てきましたが、それでもコードをデバッグできません。スワイプは検出されません。私は Android プログラミングと Java の両方の初心者なので、あまり批判しないでください。

  • レイアウト全体を埋めるボタンを備えた単純な線形レイアウトがあります。ボタンがクリックされるたびに、値が 1 ずつ増加します。
  • 左から右へのスワイプを実装しようとしています。私の基本的な疑問は、ボタンまたは線形レイアウトで setOnTouchListener を実装する必要があるかということです。
  • OnGestureListener と OnTouchListener を使用している人を見てきました。どちらが好ましいですか?

    public class MainActivity extends Activity implements OnClickListener{
    
    public Button increment;
    public int cnt= 0;
    private static final int SWIPE_MIN_DISTANCE = 80;
    private static final int SWIPE_THRESHOLD_VELOCITY = 40;
    GestureDetector gestureDetector;
    LinearLayout swipe_layout= (LinearLayout)findViewById(R.id.linear);
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        increment= (Button)findViewById(R.id.numberkey);
        increment.setOnClickListener(this);
        setDisplay(0);
        gestureDetector= new GestureDetector(this, new Detector());
        increment.setOnTouchListener(new OnTouchListener() {
    
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                gestureDetector.onTouchEvent(event);
                return true;
            }
        });
    
    }
    
    @Override
    public void onClick(View v) 
    {
        setDisplay(cnt++);
    }
    
    private void setDisplay(int i) 
    {   increment.setText(String.valueOf(i));
    }
    
    class Detector extends SimpleOnGestureListener {
    
    @Override
        public boolean onDown(MotionEvent e) {
            return true;
        }
    
    
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float            velocityY) {
                // right to left swipe
                if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)
                   Toast.makeText(MainActivity.this, "Left Swipe", Toast.LENGTH_SHORT).show();
    
                else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    Toast.makeText(MainActivity.this, "Right Swipe", Toast.LENGTH_SHORT).show();
                }
            return false;
        }
    
    }
    

    }

前もって感謝します。

4

1 に答える 1

0

動く

LinearLayout swipe_layout= (LinearLayout)findViewById(R.id.linear); 

setContentView(R.layout.activity_main);現在のアクティビティのレイアウトを設定する前にビューを見つけようとしているため、アクティビティの後

onTouchListenerレイアウトを次のように設定します。

LinearLayout swipe_layout;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    swipe_layout= (LinearLayout)findViewById(R.id.linear);

    swipe_layout.setOnTouchListener(new OnTouchListener() {

     @Override
       public boolean onTouch(View v, MotionEvent event) {

         return true;
    }
  });
于 2013-01-06T08:48:10.810 に答える