2013-10-06 66 views
0

是否可以在其他應用程序頂部繪製線條?在另一個Android應用程序頂部繪製線條

例如,有一個應用程序,示出了地圖,我想畫上的其他應用程序的頂部的線,例如從A的路線來B.

我加入許可

android.permission.SYSTEM_ALERT_WINDOW

而添加的代碼,以顯示關於其他應用程序的頂部的視圖。

 super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final WindowManager.LayoutParams param=new WindowManager.LayoutParams(); 
    param.flags=WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; 
    final View view=findViewById(R.id.my_floating_view); 
    final ViewGroup parent=(ViewGroup)view.getParent(); 
    if(parent!=null) 
     parent.removeView(view); 
    param.format=PixelFormat.RGBA_8888; 
    param.type=WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; 
    param.gravity=Gravity.CENTER; 
    param.width=parent!=null?LayoutParams.WRAP_CONTENT:view.getLayoutParams().width; 
    param.height=parent!=null?LayoutParams.WRAP_CONTENT:view.getLayoutParams().height; 
    final WindowManager wmgr=(WindowManager)getApplicationContext().getSystemService(Context.WINDOW_SERVICE); 
    wmgr.addView(view,param); 
} 

我的問題是,當我打開我的應用我看到了整個活動,我想在活動被隱藏,只看到視圖是另一個應用程序的頂部。 即在我的地圖應用程序示例中,我想查看地圖並在其上查看我繪製的線條。我不想看到我的應用程序的名稱等。

我該怎麼做?

回答

0

基本上,它是explained here Facebook如何讓他們的Chathead應用程序浮在其他應用程序之上,並且您必須將其作爲服務運行。我跟着一個example,使圖像圖標懸浮在一切之上。這是來自示例的代碼。它並不是一個確切的答案,但它應該有所幫助,並且可以根據需要調整代碼。你從正確的方向開始,我希望這將有助於縮小你需要的絕對方向。

MainActivity.java

​​

MainService.java

package com.example.floatingicon; 

import com.example.floatingicon.R; 
import android.app.Service; 
import android.content.Intent; 
import android.graphics.PixelFormat; 
import android.os.IBinder; 
import android.view.Gravity; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.WindowManager; 
import android.widget.ImageView; 

public class MainService extends Service { 

    private WindowManager windowManager; 
    private ImageView floatIcon; 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 

     floatIcon = new ImageView(this); 

     floatIcon.setImageResource(R.drawable.floating); 

     final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.TYPE_PHONE, 
      WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
      PixelFormat.TRANSLUCENT); 

     params.gravity = Gravity.TOP | Gravity.LEFT; 
     params.x = 0; 
     params.y = 100; 

     windowManager.addView(floatIcon, params); 

     try { 
      floatIcon.setOnTouchListener(new View.OnTouchListener() { 
       private WindowManager.LayoutParams paramsF = params; 
       private int initialX; 
       private int initialY; 
       private float initialTouchX; 
       private float initialTouchY; 

       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        switch (event.getAction()) { 
        case MotionEvent.ACTION_DOWN: 
         // Get current time in nano seconds. 
         initialX = paramsF.x; 
         initialY = paramsF.y; 
         initialTouchX = event.getRawX(); 
         initialTouchY = event.getRawY(); 
         break; 
        case MotionEvent.ACTION_UP: 
         break; 
        case MotionEvent.ACTION_MOVE: 
         paramsF.x = initialX + (int) (event.getRawX() - initialTouchX); 
         paramsF.y = initialY + (int) (event.getRawY() - initialTouchY); 
         windowManager.updateViewLayout(floatIcon, paramsF); 
         break; 
        } 
        return false; 
       } 
      }); 
     } catch (Exception e) { 
      // TODO: handle exception 
     } 

    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     if (floatIcon != null) windowManager.removeView(floatIcon); 
    } 
} 

main.xml中

<?xml version="1.0" encoding="utf-8" ?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center" 
    android:orientation="vertical" 
    tools:context=".MainActivity" > 

    <Button 
     android:id="@+id/btnStart" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="100dp" 
     android:text="@string/start" /> 
    <Button 
     android:id="@+id/btnStop" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@id/btnStart" 
     android:layout_alignRight="@id/btnStart" 
     android:layout_below="@id/btnStart" 
     android:layout_marginTop="10dp" 
     android:text="@string/stop" /> 
</RelativeLayout> 

這應該幫助你開始,除非你已經完成了所有的時間。

+0

您不應該使用鏈接作爲答案。您應該將所有相關信息包含在您的內容中,並將該鏈接用作歸屬/參考。另外,如果你對自己的項目有困難,你應該問一個新問題。如果它有助於提供背景,請參閱本文。 – indivisible

+0

當我回家時,我會編輯它。 – CodeMonkey

+1

我修改了我的答案,以包含我使用的代碼並重新鏈接了這些鏈接。 – CodeMonkey

相關問題