前兩天看園子裏有筒子寫了個 Android浮動小球與開機自啓動 , 感受這種被 360 玩爛的功能原來是如此的簡單啊。。。html
我不會 Java, 固然也不懂如何 用 ADT 開發 Android App.java
可是我看過幾天 Xamarin 啊,C# 我仍是會的。。android
用 Xamarin 作Android , 只要對着 java 源碼, 我仍是能翻譯一份出來的。git
我第一時間安裝了 VS2015 , 挺好的,自帶的 Android 模擬器, 比那個第三方的 Genymotion 模擬器快不少!github
不過 Xamarin 依然是收費的, 可是在鎮上,你們都知道,哈哈。app
先上個圖給你們看看我翻譯的結果:ide
照例,源碼:post
https://github.com/gruan01/Xamarin-Example/tree/master/FloatBallthis
Xamarin 聲明一個 Service 要這樣寫:url
1 namespace FloatBall { 2 [Service] 3 [IntentFilter(new string[] { "Xamarin.BallService" })] 4 public class BallService : Service, View.IOnTouchListener, View.IOnClickListener {
後面那兩個接口不是必須的。
IntentFilter 也不是必須的。
運行這個 Service ,要在 MainActivity 裏這樣寫:
1 protected override void OnCreate(Bundle bundle) { 2 base.OnCreate(bundle); 3 。。。 4 。。。 5 6 this.Finish(); 7 8 //var intent = new Intent(Application.Context, typeof(BallService)); 9 var intent = new Intent("Xamarin.BallService"); 10 this.StartService(intent); 11 }
在 Service 裏, 若是想獲取到 WindowManager 要這樣寫:
1 private IWindowManager WindowManager { 2 get { 3 //不是簡單的類型轉換,必定要用 JavaCast 4 return this.GetSystemService(Context.WindowService).JavaCast<IWindowManager>(); 5 } 6 }
注意,不是簡單的強制類型轉換, 必定要用 JavaCast
給 WindowManager 添加一個子視圖
這個真是有點造蛋啊。一開始沒有設置 LayoutParameter 的 Type
param.Type = WindowManagerTypes.Phone;
一直報這個錯:
android.view.WindowManager$BadTokenException: Unable to add window — token null is not for an application
搜了好多網頁,說的基本上都同樣, 只是不適用我這個場景。
後來仔細看了一下園友的文章,發現少了 param.Type 這個參數。。。,加上就OK了!
我能說這是個奇葩嗎?
FrameLayout & Animation
不明白爲何Animation 應到 FrameLayout 上,爲何一點做用都不起。
應用到 ImageView 上效果立馬就出來了。
不知道是我寫法不對,仍是錯覺。
最後請教一下:
如圖所示,我對 FrameLayout 作了 ShapeDrawable。
其實我是想顯示出來一個圓型的圖片出來。。
請問該如何實現?
謝謝圍觀。