用Xamarin 實現園友的 :Android浮動小球與開機自啓動

原文: 用Xamarin 實現園友的 :Android浮動小球與開機自啓動

前兩天看園子裏有筒子寫了個 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。

其實我是想顯示出來一個圓型的圖片出來。。

請問該如何實現?

 

謝謝圍觀。

相關文章
相關標籤/搜索