在另一个android应用程序上画线
有没有可能在其他应用程序上面画一条线 例如,有一个显示地图的应用程序,我想在另一个应用程序上画一条线,例如从a到B的路线 我添加了许可 android.permission.SYSTEM\u警报\u窗口 并添加代码以在其他应用程序顶部显示视图在另一个android应用程序上画线,android,Android,有没有可能在其他应用程序上面画一条线 例如,有一个显示地图的应用程序,我想在另一个应用程序上画一条线,例如从a到B的路线 我添加了许可 android.permission.SYSTEM\u警报\u窗口 并添加代码以在其他应用程序顶部显示视图 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final WindowManager.LayoutParams para
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);
}
我的问题是,当我打开我的应用程序时,我看到了整个活动,我希望该活动被隐藏,并且只看到位于另一个应用程序顶部的视图。
i、 在我的地图应用程序示例中,我希望看到地图,并在上面看到我绘制的线。我不想看到我申请的名字等等
我怎么能做到这一点呢?基本上,这是Facebook如何让他们的Chathead应用凌驾于其他应用之上,而你必须将其作为一项服务来运行。我遵循了一个使图像图标漂浮在所有其他事物之上的规则。下面是示例中的代码。这不是您想要的确切答案,但应该会有所帮助,您可以根据需要调整代码。你开始的方向是正确的,我希望这将有助于缩小你需要的绝对方向
MainActivity.java
MainService.java
main.xml
这将有助于您开始,除非您在这段时间之后已经完成。您不应该使用链接作为答案。您应该将所有相关信息包含在您的信息中,并将链接用作归属/参考。此外,如果你对自己的项目有困难,你应该问一个新问题。如果有助于提供背景信息,请参考这篇文章。我已经修改了我的答案,加入了我使用的代码和参考链接。
package com.example.floatingicon;
import com.example.floatingicon.R;
import com.example.floatingicon.MainService;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle icicle){
super.onCreate(icicle);
setContentView(R.layout.main);
Bundle bund = getIntent().getExtras();
if(bund != null && bun.getString("LAUNCH").equals("YES")){
startService(new Intent(MainActivity.this, MainService.class));
}
Button start = (Button)findViewById(R.id.btnStart);
start.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
startService(new Intent(MainActivity.this, MainService.class));
}
});
Button stop = (Button)findViewById(R.id.btnStop);
stop.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
stopService(new Intent(MainActivity.this, MainService.class));
}
});
}
@Override
protected void onResume(){
Bundle bund = getIntent().getExtras();
if(bund != null && bund.getString("LAUNCH").equals("YES")){
startService(new Intent(MainActivity.this, MainService.class));
}
super.onResume();
}
}
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);
}
}
<?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>