Android 動畫播放時退出或隱藏介面時報錯
在動畫正在播放的時候(如果你的動畫跟介面的座標點有關),介面失去隱藏,或者失去了焦點,如果沒有處理,就會報這個空指標異常。
復現場景:
自定義了一個父控制元件,然後裡面有一些子控制元件在執行動畫,動畫是根據螢幕的寬高移動,這時候,拉下Android的狀態列,或者按home鍵,甚至退出程式,都會報一個空指標異常,異常如下圖。
java.lang.NullPointerException
at android.animation.KeyframeSet.getValue(KeyframeSet.java:183)
at android.animation.PropertyValuesHolder .calculateValue(PropertyValuesHolder.java:660)
at android.animation.ValueAnimator.animateValue(ValueAnimator.java:1174)
at android.animation.ValueAnimator.animationFrame(ValueAnimator.java:1115)
at android.animation.ValueAnimator.doAnimationFrame(ValueAnimator.java:1144)
at android.animation.ValueAnimator $AnimationHandler.doAnimationFrame(ValueAnimator.java:623)
at android.animation.ValueAnimator$AnimationHandler.run(ValueAnimator.java:646)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
at android.view.Choreographer.doCallbacks(Choreographer.java:562)
at android.view.Choreographer .doFrame(Choreographer.java:531)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
解決:
從異常上
來看這個跟PropertyValuesHolder有關,但最終原因不確定。我是這麼想的,View Animation 底層的動畫執行過程依然跟Animator有關,所以在失去焦點後他便找不到座標點了,所以他的過渡點便成了null。只是這麼想,不知道對不對……
所以我在自定義控制元件的onVisibilityChanged()中,判斷了是否是顯示狀態,如果是顯示狀態,就讓他繼續播放動畫,否則我就執行動畫的cancel(),方法使之先取消。
cancel方法:取消動畫
【功能說明】該方法用於取消一個動畫的執行。該方法是取得一個正在執行中的動畫的主要方法。cancel方法和startNow方法結合可以實現對動畫執行過程的控制。需要注意的是,通過cancel方法取消的動畫,必須使用reset方法或者setAnimation方法重新設定,才可以再次執行動畫。
@Override
protected void onVisibilityChanged(View changedView, int visibility) {
super.onVisibilityChanged(changedView, visibility);
if (visibility != VISIBLE){
View childAt = getChildAt(XXX);
Animation animation = childAt.getAnimation();
animation.cancel();
}else{
View childAt = getChildAt(XXX);
childAt.getAnimation().reset();
childAt.getAnimation().start();
}
}
相關推薦
Android 動畫播放時退出或隱藏介面時報錯
在動畫正在播放的時候(如果你的動畫跟介面的座標點有關),介面失去隱藏,或者失去了焦點,如果沒有處理,就會報這個空指標異常。 復現場景: 自定義了一個父控制元件,然後裡面有一些子控制元件在執行動畫,動畫是根據螢幕的寬高移動,這時候,拉下Android的狀態列,
微信小程式退出或隱藏後,內嵌的web-view的音訊沒有停止的幾種解決辦法
1.嘗試下通過h5的pagehide事件 2.小程式改變web-view src的hash值,網頁端監聽hashchange來處理 這均需要在h5去修改程式碼。 3.使用wx.pauseVoice() 4.注意的地方 wx.pauseVoice()介面主要用來實現暫停正在播放的語音。需要注意的是當再
Android Mediaplayer播放時設定頻譜
仿網易雲音樂播放時跳躍的頻譜狀態,此案例是根據聲音的大小動態的設定跳動頻率和高度,而網易雲音樂是固定的。 //建立一個展示音波柱的自定義View VisualizerView mVisualizerView = new VisualizerView(); 給
docker端口映射或啟動容器時報錯Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen
prot 服務 sina des ram pla sys from localhost 現象: [[email protected] ~]# docker run -d -p 9000:80 centos:httpd /bin/sh -c /usr/local/
Android應用程式簽名打包,混淆程式碼時報錯的處理方法
看了很多關於如何解決android應用程式打包出錯的帖子,試用之後,發現並不能完全解決我所遇到的問題。糾結了幾天,終於解決了我所遇到的問題,現將處理方法寫出來以備自己日後查閱,也為遇到相同問題的朋友提供一點思路。 在我的程式中使用到了ksoap2.jar,關於這個Jar包
linux 終端啟動圖形化程式介面時報錯:No protocol specified
這是因為Xserver預設情況下不允許別的使用者的圖形程式的圖形顯示在當前螢幕上. 如果需要別的使用者的圖形顯示在當前螢幕上, 則應以當前登陸的使用者, 也就是切換身份前的使用者執行如下命令 xhost + 遠端訪問時也會出現類似問題: 第一步:用root登陸
Android 同時播放縮放動畫和位移動畫 時, 位移的路徑會發生偏移.
不能理解的bug. Android 同時播放縮放動畫和位移動畫 時, 位移的路徑會發生偏移.  
android使用webview時按後退退出的問題
最近將要把美女圖片打包成安卓 public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.o
WPF Storyboard 動畫播放完畢時觸發的事件
bsp wpf cls 圖片 bubuko completed 故事 技術 ima /*故事版*/ Storyboard ClSto2; public PopUpWindow() {
android 音樂播放器介面
一、團隊成員 姓名 學號 部落格地址 成凱 1600802002 http://www.cnblogs.com/ck03/ 黨康 1600802004 http://www.cnblogs.com/lxxxy/ 趙樂 1600802034 http://www.cnblogs.com/Z-y-H/ 二、
Android實時監聽軟鍵盤顯示或隱藏
搞了一個實時監聽軟鍵盤顯示或隱藏,當軟鍵盤隱藏了,做邏輯;軟鍵盤顯示出來了,做邏輯; 直接上程式碼了,下面是我寫的工具類,名字為 SoftKeyBoardListener : import android.app.Activity; import android.graphics.
使用Vitamio打造自己的Android萬能播放器(3)——本地播放(主介面、播放列表)
public class FragmentFile extends FragmentBase implements OnItemClickListener { private FileAdapter mAdapter; @Override public V
android studio 新建或者匯入專案時緩慢或卡死的問題
先說一下碰到的問題,最近要換一個電腦開發,電腦上環境都已經配好就直接down下來專案匯入,發現在Building的時特別慢,之前從github上下載的專案也會出現這種情況,等的是心力交瘁。 為了解決這個問題花了將近一天的時間,特將其記錄下來,希望對碰到這個問題的朋友有所幫助。 注: A
springboot 專案普通類中呼叫mapper或service介面(utils包下的類封裝方法時呼叫mapper或service介面)
1、該類使用@Component註解 2、新增一個你需要用到的類的靜態欄位 3、建立一個初始化方法,貼上@PostConstruct 標籤,用於注入bean 4、建立方法呼叫mapper或service介面 5、最後直接在普通類中呼叫即可 //1 @Compon
Android 使用jQuery實現item點選顯示或隱藏的特效
效果圖 分析 上圖中的功能在很多APP上都可能用到過,例如app的幫助介面,告訴使用者如何使用APP 一般的實現方式都是通過ListView來實現的,實際上此類需求非常簡單,完全可以用WebView載入HTML來實現 抽屜樣式的顯示隱藏特效可以使
Android適配華為手機虛擬按鍵顯示或隱藏
華為的一些手機的螢幕上的虛擬按鍵是可以顯示或者隱藏的,因此在佈局適配的時候就要考慮到這個問題,要不然當虛擬按鍵被隱藏後介面的佈局就會出現問題,下面給出一種解決方法,(原文來自:安卓適配碰到的一些問題) 因為虛擬按鍵的開啟會涉及到view的重繪,因此可以重寫根l
android api 中setVisibility( )的用法(可顯示或隱藏佈局或控制元件...)
View預設為可見的,在應用可以通過setVisibility 修改View的可見性,View可用性可以有如下三種狀態: View.VISIBLE View可見 View.INVISIBLE View不可以見,但仍然佔據可見時的大小和位置。 View.GONE View不可
使用RecyclerView滑動時設定標題欄漸變或隱藏效果
看一下效果圖。 這樣設計有利於發揮手機螢幕的利用空間,如果首頁內容較多的時候,不影響體驗。 所有的操作都是在RecyclerView監聽方法的onScrolled方法裡實現。 直接看該方法的官方介紹: /**
Android之AlarmManager(全域性定時器/鬧鐘)指定時長或以週期形式執行某項操作
1、AlarmManager,顧名思義,就是“提醒”,是Android中常用的一種系統級別的提示服務,可以實現從指定時間開始,以一個固定的間隔時間執行某項操作,所以常常與廣播(Broadcast)連用,實現鬧鐘等提示功能 2、AlarmManager的常用方法有三個: (1)set(int t
android 動畫 從view頂部退出、進入(系列動畫)
<translate xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"