Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 视图的颜色不会以编程方式更改_Android_View - Fatal编程技术网

Android 视图的颜色不会以编程方式更改

Android 视图的颜色不会以编程方式更改,android,view,Android,View,我创建了一个应用程序,在屏幕上应用彩色滤镜。我想通过按按钮来改变滤光片的颜色。在xml文件中更改背景颜色是可行的,但当我尝试在服务中更改背景颜色时,它不会更改颜色。我没有发现错误,但颜色没有变化。我认为,由于我使用windowmanager添加视图,而不是使用setContentView设置视图,因此可能不会应用颜色更改。这是我的服务的代码,我知道调用该服务是因为Log.d(标记“onCreated”)显示在logcat中。顺便说一句,我尝试过改变root的颜色,而不是bView,但最终得到了相

我创建了一个应用程序,在屏幕上应用彩色滤镜。我想通过按按钮来改变滤光片的颜色。在xml文件中更改背景颜色是可行的,但当我尝试在服务中更改背景颜色时,它不会更改颜色。我没有发现错误,但颜色没有变化。我认为,由于我使用windowmanager添加视图,而不是使用
setContentView
设置视图,因此可能不会应用颜色更改。这是我的服务的代码,我知道调用该服务是因为
Log.d(标记“onCreated”)显示在logcat中。顺便说一句,我尝试过改变
root
的颜色,而不是
bView
,但最终得到了相同的结果

public class ChangeColor extends Service {
    public static final String TAG = "ChangeColour";
    View mOverlayView;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

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

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mOverlayView = inflater.inflate(R.layout.overlay_view, null);
        LinearLayout bView = (LinearLayout) mOverlayView.findViewById(R.id.lin);
        if (bView != null) {
            View root = bView.getRootView();
            bView.setBackgroundColor(Color.parseColor("#000000"));
            Log.d(TAG, "onCreated");
        }
        return START_NOT_STICKY;
    }
}

查看是否要查看正在添加视图的服务和活动。如果有人有任何想法,请告诉我!谢谢。

试试下面的方法。我没有看到您在哪里将视图添加到窗口,尽管我知道您以前在那里有视图。我还更改了颜色和一些值,以便能够注意到更改。确保在清单中定义了服务

public class ChangeColor extends Service {
    public static final String TAG = "ChangeColour";
    View mOverlayView;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
                        WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
                        WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
                PixelFormat.TRANSLUCENT);
        params.alpha = 0.5F;
        params.dimAmount = 0.9F;
        WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
        LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mOverlayView = inflater.inflate(R.layout.overlay_view, null);
        wm.addView(mOverlayView, params);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if (mOverlayView != null) {
            mOverlayView.setBackgroundColor(Color.parseColor("#FF0000"));
        }
        return START_NOT_STICKY;
    }
}

试试这个。这个概念可能会有所帮助。@sarthakGandhi感谢您的评论,我已经创建了覆盖,但我想知道是否有办法在不编辑xml文件的情况下更改覆盖的颜色。无论如何,谢谢。我不认为以这种方式操纵任何活动是个好主意。另一种可能的方法是使用您从服务发送到视图所在活动的广播。谢谢,这很有效!添加视图后,是否可以更改视图的颜色?或者您必须删除视图,然后用不同的颜色重新添加它吗?@sandraburgle是的,使用intent将信息传递给服务的
onStartCommand()
方法,通知它您想要什么颜色<代码>setBackgroundColor
可以多次调用。棒极了,效果很好。我用它来传递我需要的颜色。真不敢相信它终于起作用了!谢谢你花时间帮助我,这确实花了我一段时间。嘿,我在尝试更改同一视图的alpha属性时遇到了问题,颜色变化很好,但由于某种原因alpha没有变化。如果你不介意再帮我一次,这是链接