2017-06-27 2 views
0

色付きフィルタを画面に適用するアプリケーションを作成しました。ボタンを押してフィルターの色を変えたいと思っています。 xmlファイルの背景色を変更すると機能しますが、サービスで変更しようとすると色は変わりません。私はエラーは表示されませんが、色は変わりません。私はwindowmanagerでビューを追加しているので、setContentViewで設定しないので、色の変更が適用されない可能性があります。ここに私のサービスのコードがあります。Log.d(TAG,"onCreated");がlogcatに表示されているため、サービスが呼び出されていることがわかります。ところで、私はbViewの代わりにrootの色を変更しようとしましたが、私は同じ結果に終わります。ビューの色がプログラムで変更されない

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; 
    } 
} 

ビューを追加しているサービスや活動を見たい場合はmy old postを参照してください。もし誰かが私に知らせる何かを持っている!ありがとう。

+0

これを試してください。 https://stackoverflow.com/questions/11443820/floating-widget-overlay-on-android-launcherこのコンセプトは役に立ちます。 –

+0

コメントは@sarthakGandhiありがとう、私はすでにオーバーレイを作成しましたが、xmlファイルを編集せずにオーバーレイの色を変更する方法があるかどうかを知りたいと思います。とにかく、ありがとう。 –

+0

私はこのような活動を操作することは良い考えだとは思いません。あなたのサービスからビューが内部にあるアクティビティに送信するブロードキャストを使用することも可能です。 – Opiatefuchs

答えて

0

以下を試してください。私はあなたが以前そこにいたことを知っていますが、私はあなたがウィンドウにビューを追加した場所を見ませんでした。色といくつかの値を変更して、変更に気づくことができました。マニフェストでサービスが定義されていることを確認してください。

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; 
    } 
} 
+0

ありがとうございます!ビューを追加した後、ビューの色を変更することは可能でしょうか?または、ビューを削除して別の色で再追加する必要がありますか? –

+0

@sandraburgleはい、インテントを使って、あなたが望む色を通知するサービスの 'onStartCommand()'メソッドに情報を渡します。 'setBackgroundColor'は複数回呼び出すことができます。 – Cheticamp

+0

素晴らしいです。私は[あなたは以前にリンクしたこの投稿を使用しています(https://stackoverflow.com/questions/3293243/pass-data-from-activity-to-service-using-an-intent/15899750#15899750)私は欲しい。それは最終的に動作するとは信じられない!時間を費やして私を助けてくれてありがとう、それは確かに時間がかかりました。 –

関連する問題