2013-10-06 64 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

相关问题