用Xamarin 实现园友的 :Android浮动小球与开机自启动
前兩天看園子里有筒子寫了個(gè) Android浮動小球與開機(jī)自啟動? , 感覺這種被 360 玩爛的功能原來是如此的簡單啊。。。
我不會 Java, 當(dāng)然也不懂如何 用 ADT 開發(fā) Android App.
但是我看過幾天 Xamarin 啊,C# 我還是會的。。
用 Xamarin 做Android , 只要對著 java 源碼, 我還是能翻譯一份出來的。
我第一時(shí)間安裝了 VS2015 , 挺好的,自帶的 Android 模擬器, 比那個(gè)第三方的?Genymotion 模擬器快很多!
不過 Xamarin 依然是收費(fèi)的, 但是在鎮(zhèn)上,大家都知道,哈哈。
先上個(gè)圖給大家看看我翻譯的結(jié)果:
照例,源碼:
https://github.com/gruan01/Xamarin-Example/tree/master/FloatBall
?
Xamarin 聲明一個(gè) Service 要這樣寫:
1 namespace FloatBall { 2 [Service] 3 [IntentFilter(new string[] { "Xamarin.BallService" })] 4 public class BallService : Service, View.IOnTouchListener, View.IOnClickListener {后面那兩個(gè)接口不是必須的。
IntentFilter 也不是必須的。
?
運(yùn)行這個(gè) 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 //不是簡單的類型轉(zhuǎn)換,一定要用 JavaCast 4 return this.GetSystemService(Context.WindowService).JavaCast<IWindowManager>(); 5 } 6 }注意,不是簡單的強(qiáng)制類型轉(zhuǎn)換, 一定要用 JavaCast
?
給 WindowManager 添加一個(gè)子視圖
這個(gè)真是有點(diǎn)造蛋啊。一開始沒有設(shè)置 LayoutParameter 的 Type
param.Type = WindowManagerTypes.Phone;一直報(bào)這個(gè)錯(cuò):
android.view.WindowManager$BadTokenException: Unable to add window — token null is not for an application
搜了好多網(wǎng)頁,說的基本上都一樣, 只是不適用我這個(gè)場景。
后來仔細(xì)看了一下園友的文章,發(fā)現(xiàn)少了 param.Type 這個(gè)參數(shù)。。。,加上就OK了!
我能說這是個(gè)奇葩嗎?
?
FrameLayout &?Animation
不明白為什么Animation 應(yīng)到 FrameLayout 上,為什么一點(diǎn)作用都不起。
應(yīng)用到 ImageView 上效果立馬就出來了。
不知道是我寫法不對,還是錯(cuò)覺。
?
最后請教一下:
如圖所示,我對 FrameLayout 做了?ShapeDrawable。
其實(shí)我是想顯示出來一個(gè)圓型的圖片出來。。
請問該如何實(shí)現(xiàn)?
?
謝謝圍觀。
總結(jié)
以上是生活随笔為你收集整理的用Xamarin 实现园友的 :Android浮动小球与开机自启动的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Shell-Scp自动输入密码
- 下一篇: yum之如何手动创建本地yum仓库