2013-08-17 99 views
0

我想在動畫播放時鎖定ontouch監聽器。這是我的代碼。鎖ontouch監聽器

public class MainActivity extends Activity implements OnTouchListener { 


boolean gifIsPlaying; 
long PLAYING_TIME_OF_GIF = 111; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    GIFWebView view = new GIFWebView 
      (this, "file:///android_asset/imageedit_ball.gif"); 


    gifIsPlaying = true; 

    new Handler().postDelayed(new Runnable() { 
     public void run() { 
      gifIsPlaying = false; 
     } 
    }, PLAYING_TIME_OF_GIF); 


    setContentView(view); 
    view.setOnTouchListener(this); 
    }  

public boolean onTouch(View v, MotionEvent event) { 
    // TODO Auto-generated method stub 

    if (gifIsPlaying) { 
     // No response to touch events 
    } else { 
     // Respond to touch events 
     GIFWebView view1 = new GIFWebView 
       (this, "file:///android_asset/imageedit_ball.gif"); 

     gifIsPlaying = true; 

     new Handler().postDelayed(new Runnable() { 
      public void run() { 
       gifIsPlaying = false; 
      } 
     }, PLAYING_TIME_OF_GIF); 

     setContentView(view1); 
    } 

    // Consume touch event 
    return true; 
} 

} 

我試過在ontouch中實現ontouch但沒用。我想temperory鎖ontouch,直到gif動​​畫完成一個循環。請幫忙。

+0

在onTouch中使用布爾變量來執行代碼...您可以使用TimerTask等待一段時間並切換布爾變量。 – bakriOnFire

+0

public boolean isAnimationOn = false; public boolean onTouch(View v,MotionEvent event){if(isAnimationOn) return false; else return true; }我嘗試使用這個,但沒有工作 – Meghs

+0

提供,美曾使用正確的代碼實現.. – bakriOnFire

回答

1

你可以嘗試以下如果你知道GIF的運行時間:

聲明全局布爾變量:

boolean gifIsPlaying; 
long PLAYING_TIME_OF_GIF = ???; 

創建和添加GIFWebView到您的活動的看法後,設置gifIsPlayingtrue 。延遲後一個Runnable設置gifIsPlayingfalsePLAYING_TIME_OF_GIF後:

gifIsPlaying = true; 

new Handler().postDelayed(new Runnable() { 
    public void run() { 
     gifIsPlaying = false; 
    } 
}, PLAYING_TIME_OF_GIF); 

PLAYING_TIME_OF_GIF將是一個long變量。

內,您的onTouch(查看,MotionEvent):

public boolean onTouch(View v, MotionEvent event) { 
    if (gifIsPlaying) { 
     // No response to touch events 
    } else { 
     // Respond to touch events 
     GIFWebView view1 = new GIFWebView 
       (this, "file:///android_asset/imageedit_ball.gif"); 

     gifIsPlaying = true; 

     new Handler().postDelayed(new Runnable() { 
      public void run() { 
       gifIsPlaying = false; 
      } 
     }, PLAYING_TIME_OF_GIF); 

     setContentView(view1); 
    } 

    // Consume touch event 
    return true; 
} 

如果這種方法對你的作品,考慮創建一個Handler一次,並重新使用。 Runnable也一樣。

我不認爲有任何其他方式來解決這個問題。當然沒有回調方法可以告訴你GIF已經運行了。

+0

它不起作用,實際上一開始觸摸事件正在發生,但稍後觸摸事件不起作用。 – Meghs

+0

@Meghs你可以在上面的問題中發佈你的整個活動嗎? – Vikram

+0

請檢查,我編輯了它 – Meghs