마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Activity에서 Service로된 view를 제어하는 방법

0 추천

안드로이드 초보입니다.

MainActivity에서 Seekbar를 변경해서 Service로 최상위로 띄어진 View의 투명도(alpha)값을 변경하려고 합니다.

그래서 어찌어찌해서 아래와 같이 작성해서 구현은 했는데...

seekbar변경에 따라 view의 변경이 겁나게 느립니다. (0.5초이상 반응 딜레이가 발생됨)

혹시 더 좋은 방법이 있으면 초보에게 한 수 알려주시면 감사하겠습니다.

 

MainActivity

final Intent intent = new Intent(this, MyService.class);
seekbar1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        seekbaraaa = seekbar1.getProgress();
       intent.putExtra("aabbcc",seekbaraaa);
       startService(intent);
    }
    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
    }
    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
    }
});

 

Service

@Override
public void onCreate() {
    super.onCreate();
    LayoutInflater inflate = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mView = inflate.inflate(R.layout.activity_myservice, null);

    eeffgg = false;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    ddeeff = intent.getIntExtra("aabbcc",0);
    floatbright = (float)ddeeff / 100;
    if (eeffgg == false) {  //뷰 표시가 아니면...
        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
                WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
                PixelFormat.TRANSLUCENT);
        params.alpha = floatbright;
        wm = (WindowManager) getSystemService(WINDOW_SERVICE);
        wm.addView(mView, params);
        eeffgg = true;
    } else {  //뷰가 표시중이면...
        if(wm != null) {
            if(mView != null) {
                wm.removeView(mView);
                mView = null;
            }
            wm = null;
        }
        LayoutInflater inflate = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mView = inflate.inflate(R.layout.activity_myservice, null);
        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
                WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
                PixelFormat.TRANSLUCENT);
        params.alpha = floatbright;
        wm = (WindowManager) getSystemService(WINDOW_SERVICE);
        wm.addView(mView, params);
    }
    Toast.makeText(this, String.valueOf(ddeeff), Toast.LENGTH_SHORT).show();

    return super.onStartCommand(intent, flags, startId);
}

@Override
public void onDestroy() {
    super.onDestroy();
    if(wm != null) {
        if(mView != null) {
            wm.removeView(mView);
            mView = null;
        }
        wm = null;
    }
}

 

초보 님이 2019년 8월 4일 질문

1개의 답변

0 추천
...