1. 程式人生 > >Android 動畫播放時退出或隱藏介面時報錯

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 專案普通類中呼叫mapperservice介面(utils包下的類封裝方法呼叫mapperservice介面

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"