當前位置:編程學習大全網 - 源碼下載 - 點擊壹個ImageView讓它至於控件的最前面,該如何處理

點擊壹個ImageView讓它至於控件的最前面,該如何處理

先談壹下基本的實現原理,這種桌面懸浮窗的效果很類似與Widget,但是它比Widget要靈活的多。主要是通過WindowManager這個類來實現的,調用這個類的addView方法用於添加壹個懸浮窗,updateViewLayout方法用於更新懸浮窗的參數,removeView用於移除懸浮窗。其中懸浮窗的參數有必要詳細說明壹下。

WindowManager.LayoutParams這個類用於提供懸浮窗所需的參數,其中有幾個經常會用到的變量:

type值用於確定懸浮窗的類型,壹般設為2002,表示在所有應用程序之上,但在狀態欄之下。

flags值用於確定懸浮窗的行為,比如說不可聚焦,非模態對話框等等,屬性非常多,大家可以查看文檔。

gravity值用於確定懸浮窗的對齊方式,壹般設為左上角對齊,這樣當拖動懸浮窗的時候方便計算坐標。

x值用於確定懸浮窗的位置,如果要橫向移動懸浮窗,就需要改變這個值。

y值用於確定懸浮窗的位置,如果要縱向移動懸浮窗,就需要改變這個值。

width值用於指定懸浮窗的寬度。

height值用於指定懸浮窗的高度。

創建懸浮窗這種窗體需要向用戶申請權限才可以的,因此還需要在AndroidManifest.xml中加入<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

原理介紹完了,下面我們開始用代碼實現。首先在Eclipse中新建壹個Android項目,項目名就叫做360FloatWindowDemo。然後寫壹下布局文件,布局文件非常簡單,只有壹個按鈕,打開或新建activity_main.xml,加入如下代碼:

[html] view plain copy

<RelativeLayout xmlns:android="/apk/res/android"

xmlns:tools="/tools"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

tools:context=".MainActivity" >

<Button

android:id="@+id/start_float_window"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Start Float Window" >

</Button>

</RelativeLayout>

然後再新建壹個名為float_window_small.xml的布局文件,用於做為小懸浮窗的布局,在其中加入如下代碼:

[html] view plain copy

<?xml version="1.0" encoding="UTF-8"?>

<LinearLayout

xmlns:android="/apk/res/android"

android:id="@+id/small_window_layout"

android:layout_width="60dip"

android:layout_height="25dip"

android:background="@drawable/bg_small"

>

<TextView

android:id="@+id/percent"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:gravity="center"

android:textColor="#ffffff"

/>

</LinearLayout>

再新建壹個名為float_window_big.xml的布局文件,用於做為大懸浮窗的布局,在其中加入如下代碼:

[html] view plain copy

<?xml version="1.0" encoding="UTF-8"?>

<LinearLayout

xmlns:android="/apk/res/android"

android:id="@+id/big_window_layout"

android:layout_width="200dip"

android:layout_height="100dip"

android:background="@drawable/bg_big"

android:orientation="vertical"

>

<Button

android:id="@+id/close"

android:layout_width="100dip"

android:layout_height="40dip"

android:layout_gravity="center_horizontal"

android:layout_marginTop="12dip"

android:text="關閉懸浮窗"

/>

<Button

android:id="@+id/back"

android:layout_width="100dip"

android:layout_height="40dip"

android:layout_gravity="center_horizontal"

android:text="返回"

/>

</LinearLayout>

兩個懸浮窗布局文件中用到的圖片資源,大家可以隨便找點圖片來代替,同時我會給出源碼,大家也可以從源碼中取出。

然後打開或創建MainActivity,這是項目的主界面,在裏面加入如下代碼:

[java] view plain copy

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button startFloatWindow = (Button) findViewById(R.id.start_float_window);

startFloatWindow.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

Intent intent = new Intent(MainActivity.this, FloatWindowService.class);

startService(intent);

finish();

}

});

}

}

這裏可以看到,MainActivity的代碼非窗簡單,就是對開啟懸浮窗的按鈕註冊了壹個點擊事件,用於打開壹個服務,然後關閉當前Activity。創建懸浮窗的邏輯都交給服務去做了。

  • 上一篇:藍屏代碼0x0000000A (0*00000120 0*00000002 0*00000000 0*804F41CD)
  • 下一篇:新媒體與互聯網應用的就業方向
  • copyright 2024編程學習大全網