首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android Handler 定時切換圖片:libpng 錯誤與 .9.png 陷阱

     編輯:程式設計疑難解答

程式碼邏輯正確

使用 Handler.postDelayed(Runnable, 1000) 實現每秒切換圖片,邏輯無誤:

private Handler handler = new Handler();
private int[] resIds = {R.drawable.f1, R.drawable.f2, R.drawable.f3, R.drawable.f4};
private int index = 0;

private Runnable runnable = new Runnable() {
    @Override public void run() {
        index = (index + 1) % 4;
        imageView.setImageResource(resIds[index]);
        handler.postDelayed(this, 1000);
    }
};

@Override protected void onCreate(Bundle savedInstanceState) {
    // ...
    handler.postDelayed(runnable, 1000);
}

建置錯誤真兇:libpng error: Not a PNG file

錯誤發生在 :app:mergeDebugResources 階段,與程式碼無關。原因是 res/drawable/ 下有 假 PNG 或損壞的 .9.png。

.9.png (NinePatch) 規則

  • 檔名必須以 .9.png 結尾。
  • 四邊各留 1px 邊框:左/上標記可拉伸區域(黑線),右/下標記內容區域(黑線)。
  • 若直接複製普通 PNG 並改名為 .9.png,但無邊框標記 → AAPT 視為格式錯誤。

解決步驟

  1. 在 Android Studio 專案視圖找到報錯圖片(Build Output 會列出路徑)。
  2. 用 Draw 9-patch 工具(SDK tools/draw9patch.bat)開啟並修正邊框,或改回普通 .png。
  3. Build → Clean Project → Rebuild Project。

總結

Handler 邏輯正確,建置失敗純屬資源檔問題。檢查所有 .9.png 是否符合 NinePatch 規範,或將不需拉伸的圖改為普通 PNG。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved