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