如何在其他应用上显示代码绘制线?

时间:2014-05-15 14:27:30

标签: android drawing android-service android-windowmanager

详细信息:我想添加一个代码绘制线(就像你用canvas / paint绘制一样)并将其显示在其他应用程序上。

我目前有一个应用程序,允许我在其他应用程序上显示图像。有关我的代码,请参阅我的Stackoverflow answer。我已经实现了这样做的许可:

android.permission.SYSTEM_ALERT_WINDOW

我试图在没有错误的情况下向WindowManager添加画布/绘画,但我的应用程序崩溃了。我试图寻找答案,但已经空了。

如果有人能帮我解决这个问题,我们将不胜感激!

澄清一下:我希望能够将其绘制在可以将其放在其他应用程序上以及我仍然可以与其他应用程序交互的位置。此外,我添加了一个按钮功能,我使用WindowManager addView和WindowManager removeView关闭/打开视图,但每次添加视图时,它都会覆盖整个区域,我无法再单击按钮来删除视图

1 个答案:

答案 0 :(得分:4)

我找到了一种方法并将在这里分享。如果您需要更多代码,请使用我在问题中也链接到的Stackoverflow answer链接。

我想我到目前为止还没有设置正确的代码或至少所有代码。

DrawView.java

package com.example.floatingicon;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class DrawView extends View{
    Paint paint = new Paint();

    public DrawView(Context context){
        super(context);
        paint.setColor(Color.BLACK);
    }

    @Override
    public void onDraw(Canvas canvas){
        canvas.drawLine(240, 0, 240, 620, paint);
        canvas.drawLine(0, 200, 480, 200, paint);
    }
}

这将在屏幕上画一个十字架

MainService.java

import com.example.floatingicon.DrawView;

public class MainService extends Service
{
    private DrawView drawView;

    @Override
    public void onCreate()
    {
        drawView = new DrawView(this);

        final WindowManager.LayoutParams paramsDraw = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT, 
            WindowManager.LayoutParams.WRAP_CONTENT, 
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, 
            PixelFormat.TRANSLUCENT);

        paramsDraw.gravity = Gravity.TOP | Gravity.LEFT;
        paramsDraw.x=0;
        paramsDraw.y=0;

        winManager.addView(drawView, paramsDraw);
    }
}

如果将其添加到现有代码中,它应该可以正常工作。