2016-09-17 16 views
0

ジェスチャーの仕組みを説明するこのチュートリアルを試しました。ジェスチャーを検出してトーストを生成する単純なアクティビティーを作成しました。今私は自分のプロジェクトに取り組んでおり、単純な相対レイアウトとイメージビューを持つ私のホームページを作った。ジェスチャーも同様にそこで見つけることができます。今、私は新しいヘルプページを作って、できることすべてを試しましたが、ジェスチャーは私のために働いていません。それはレイアウトのためですか?これには複数の相対的線形レイアウトが含まれているためです。 以下は私のヘルプ活動です。私はLongPressで音声認識を開こうとしています(私はトーストをここにしようとしていますが、動作していません)。 助けていただければ幸いです。私はジェスチャー検出がレイアウト上で機能していない

package com.example.dell.optasia; 

import android.app.ActivityManager; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.Color; 
import android.graphics.drawable.ColorDrawable; 
import android.media.MediaPlayer; 
import android.speech.tts.TextToSpeech; 
import android.support.v4.view.GestureDetectorCompat; 
import android.support.v7.app.ActionBar; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.GestureDetector; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.ViewSwitcher; 
import static android.view.GestureDetector.*; 
import org.w3c.dom.Text; 

import java.util.List; 

public class Help extends AppCompatActivity implements 
     OnGestureListener, OnDoubleTapListener { 
    private GestureDetectorCompat GestureDetect; 
    public MediaPlayer mp1; 
    TextView textView; 
    TextView answer5; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_help); 
     mp1 = MediaPlayer.create(Help.this, R.raw.help); 
     mp1.start(); 
     ActionBar ab = getSupportActionBar(); //Actionbar 
     ab.setLogo(R.mipmap.iconlaunch); 
     ab.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); // set your desired color 

     ab.setDisplayUseLogoEnabled(true); //shows logo 
     ab.setDisplayShowHomeEnabled(true); //shows home page 
     TextView textView= (TextView) findViewById(R.id.textView); 

     GestureDetect = new GestureDetectorCompat(this, this); 
     GestureDetect.setOnDoubleTapListener(this); 

     TextView txtview = (TextView) findViewById(R.id.question1); 
     final TextView answer1 = (TextView) findViewById(R.id.answer1); 

       txtview.setOnClickListener(new View.OnClickListener() 
       { 
        @Override 
        public void onClick(View v) { 
         if (answer1.getVisibility() == View.VISIBLE) 
          answer1.setVisibility(View.GONE); 
         else 
         answer1.setVisibility(View.VISIBLE); 
        } 

       }); 

     TextView txtview1 = (TextView) findViewById(R.id.question2); 
     final TextView answer2 = (TextView) findViewById(R.id.answer2); 
       txtview1.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v){ 
         if (answer2.getVisibility() == View.VISIBLE) 
          answer2.setVisibility(View.GONE); 
         else 
          answer2.setVisibility(View.VISIBLE); 
         } 
       }); 
     TextView txtview2 = (TextView) findViewById(R.id.question3); 
     final TextView answer3 = (TextView) findViewById(R.id.answer3); 
       txtview2.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         if (answer3.getVisibility() == View.VISIBLE) 
          answer3.setVisibility(View.GONE); 
         else 
         answer3.setVisibility(View.VISIBLE); 
        } 
       }); 
     TextView txtview3 = (TextView) findViewById(R.id.question4); 
     final TextView answer4 = (TextView) findViewById(R.id.answer4); 

     txtview3.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         if (answer4.getVisibility() == View.VISIBLE) 
          answer4.setVisibility(View.GONE); 
         else 
         answer4.setVisibility(View.VISIBLE); 
        } 
       }); 

     TextView txtview4 = (TextView) findViewById(R.id.question5); 
     final TextView answer5 = (TextView) findViewById(R.id.answer5); 
       txtview4.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         if (answer5.getVisibility() == View.VISIBLE) 
          answer5.setVisibility(View.GONE); 
         else 
         answer5.setVisibility(View.VISIBLE); 
        } 
       }); 



    } 

    //for the overflow actionbar 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater menuInflater = getMenuInflater(); 
     menuInflater.inflate(R.menu.main_activity_menu, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 

    //for the actionbar menu items 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     switch (item.getItemId()) { 
      case R.id.Play_ID: 
       mp1 = MediaPlayer.create(Help.this, R.raw.manual); 
       mp1.start(); 
       break; 
      case R.id.Help_ID: 
       startActivity(new Intent(Help.this, Help.class)); 
       break; 
      case R.id.About_ID: { 
       startActivity(new Intent(Help.this, LocationMain.class)); 
       return true; 
      } 
      case R.id.Contact_Us:{ 
       startActivity(new Intent(Help.this, ContactUs.class)); 
       return true; 
      } 
      case android.R.id.home:{ 
       startActivity(new Intent(Help.this, HomeScreen.class)); 
       return true; 
      } 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
     return false; 
    } 
    //calls event for the gestures 
    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     GestureDetect.onTouchEvent(event); 
     return super.onTouchEvent(event); 
    } 
    @Override 
    public boolean onDoubleTap(MotionEvent motionEvent) { 
     return false; 
    } 

    @Override 
    public boolean onSingleTapConfirmed(MotionEvent motionEvent) { 
     return false; 
    } 

    @Override 
    public boolean onDoubleTapEvent(MotionEvent motionEvent) { 
     if(mp1!=null) 
     { 
      mp1.stop(); 
     } return false; 
    } 

    @Override 
    public boolean onDown(MotionEvent motionEvent) { 
     return false; 
    } 

    @Override 
    public void onShowPress(MotionEvent motionEvent) { 

    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent motionEvent) { 
     return false; 
    } 

    @Override 
    public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { 
     return false; 
    } 

    @Override 
    public void onLongPress(MotionEvent motionEvent) { 

     Toast.makeText(Help.this, "longpress!", Toast.LENGTH_LONG).show(); 

    } 

    @Override 
    public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { 
     return false; 
    } 

} 

答えて

0

あなたはGestureDetectorを作成している愚かな何かを欠落している可能性がありますが、あなたは決してあなたのビューに「それをフックしない」されています。このようなあなたのonCreateを変更してみてください:

super.onCreate(savedInstanceState); 
View v = new RelativeLayout(this); 
v.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
setContentView(v); 
mDetector = new GestureDetectorCompat(this, this); 
mDetector.setOnDoubleTapListener(this); 
v.setOnTouchListener(new OnTouchListener(){ 
    public boolean onTouch(View v, MotionEvent me){ 
     return mDetector.onTouchEvent(me); 
    } 
}); 

またはあなたはそれが私のために働いていません。この

public boolean onTouchEvent(MotionEvent event) { 
    return gestureDetectorCompat.onTouchEvent(event) 
    } 
+0

ナを試すことができます。 nullPointerExceptionをスローします。 Btw私は私のホームページにこの "フック"のものをやっていませんでしたが、すべてのジェスチャーがうまく動作します。それは複数の相対的なビューのためですか? –

+0

私はエディット済み回答plsチェック – siddhesh

+0

私はこのonTouchEventを自分のコードに既に持っています。しかし、それはOncreatメソッドではありません。 –

関連する問題