2013-04-28 3 views
13

현재 표시되고있는 화면 위에 알림을 만들 수있는 앱을 만들고 싶습니다. 아래 그림에서 ChatHead 같은 이동 SMS 메시지 팝업이나 뭐 같은 뭔가 : 동적으로 터치 events.What 포함을 그릴 수있는 경우모든 것을 위에 표시하는 방법은 무엇입니까?

enter image description here

그것은 더 나은 것은 기존의 또는 표준 방법입니다 이것을하기 위해?

예 : 클릭하거나에서 화면의 가장자리 근처에있는 원형 아이콘을 홈 화면이나 응용 프로그램 서랍 또는 다른 apps.Pay의 관심에 여부에 상관없이 드래그 할 수있는 아이콘처럼

그림이 게시되었습니다. 어느 앱에서나 드래그 할 수 있습니다.

+0

이 질문에 대한 답변보기 : http://stackoverflow.com/questions/2176922/how-to-create-transparent-activity-in-android – Jules

+0

투명 터치 이벤트를 사용하지 않으시겠습니까? – Allahjane

+0

예,하지만 다른 활동의 맨 위에 그리는 경우 원하는 내용입니다. 사용자가 내 조언이 될 수있는 바깥에 접촉하면보기를 닫습니다. – Jules

답변

8

이렇게하려면 새 작업이 필요하지 않습니다. 기존 활동에 다른보기를 추가하여 앞으로 가져오고 그보기에 원하는 것을 그리거나 쓰는 것만으로하면됩니다. 당신이 여분의 볼 수있는 특별한 일을하려면

, 당신은 당신의 자신의 뷰 클래스

class DrawOnTop extends View { 
    public DrawOnTop(Context activity) { 
     super(activity); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     // put your drawing commands here 
    } 

} 

을 만들 수 있습니다 그리고 당신은

DrawOnTop mDraw = new DrawOnTop(this); 
addContentView(mDraw, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
mDraw.bringToFront(); 

그런 다음 그릴을 강제로 그런 짓을 당신은 mDraw.invalidate();

+0

내말은 홈 화면이나 앱 메뉴 또는 다른 앱에 상관없이 클릭하거나 드래그 할 수있는 아이콘과 같습니다. – Allahjane

+0

활동의 기본보기 위에 텍스트와 비트 맵을 그릴 때 게시 한 내용을 사용했습니다. 내 추측은 당신이 당신이 제안하고있는 것을하기 위해 그것을 사용할 수 있다는 것입니다. – Stochastically

+0

죄송합니다. 제 질문을 잘못 생각한 것 같습니다! 내가 직접 다른 애플 리케이션을 통해 무승부를하고 싶습니다 – Allahjane

1

전체 레이아웃의 부모를 RelativeLayout으로 가질 수 있습니다. 첫 번째 자식은 기본 레이아웃의 "루트"입니다. 그 이후의 모든 것은 당신의 변덕에 배치 할 수있는 오버레이로 간주 될 수 있습니다.

예 :

당신이 찾고있는 무엇
<RelativeLayout> 
    <LinearLayout> 
    ... Main Layout here ... 
    </LinearLayout> 

    <TextView left="20dip" top="20dip" text="Overlay" alpha="0.7" /> 
</RelativeLayout> 
+0

내 경우에는 홈 화면과 같은 다른 앱 상단에 그림 등이 표시됩니다. – Allahjane

+0

Ah. 그렇다면 이것은 효과가 없을 것입니다. – Knossos

9

이 시스템 경고 창입니다.

StandOut이라는 라이브러리가 있습니다. 그러한 앱을 만드는 데 도움이 될 것입니다. 당신이 서비스가있는 경우

단지 추가하거나 작동하지 않는 전면으로 가져 오는 경우

가, 다른 클라이언트 활동이나 응용 프로그램에 자신의보기를 추가 말 : 여기

9

는 토스트와 대화 상자 창 같은 사물이 작동하는 방법이다 (FaceUnlock이이를 수행합니다.) 또는 계층 구조에 의존 할 수 없으면 창 관리자와 창 토큰을 사용하여 트릭을 수행해야합니다. 그런 다음 레이아웃을 생성하고 이전과 같이 애니메이션 및 하드웨어 가속을 활용할 수 있습니다.

WindowManager windowManager = (WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE); 

    WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(WindowManager.LayoutParams.FIRST_SUB_WINDOW); 
    layoutParams.width = 300; 
    layoutParams.height = 300; 

    layoutParams.format = PixelFormat.RGBA_8888; 
    layoutParams.flags = 
      WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN 
        | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED; 
    layoutParams.token = getWindow().getDecorView().getRootView().getWindowToken(); 

    //Feel free to inflate here 
    mTestView = new View(this); 
    mTestView.setBackgroundColor(Color.RED); 

    //Must wire up back button, otherwise it's not sent to our activity 
    mTestView.setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_BACK) { 
       onBackPressed(); 
      } 
      return true; 
     } 
    }); 
    windowManager.addView(mTestView, layoutParams); 

그런 다음 뷰들의 OnDestroy를 제거해야합니다 (또는 onPause)가 될하거나

if (mTestView != null) { 
     WindowManager windowManager = (WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE); 
     if (mTestView.isShown()) { 
      windowManager.removeViewImmediate(mTestView); 
     } 
    } 
1

가장 좋은 방법은 응용 프로그램과 함께 서비스를 시작하는 것입니다 충돌합니다. ImageView를 만듭니다. 이미지보기의 LayoutParams를 설정하십시오. 서비스를 만들 때 params와 함께보기를 창 관리자에 추가하십시오.

모두 설정 응용 프로그램이 닫힐 때까지 이미지가 창 (모든 응용 프로그램의 모든 화면)에 붙습니다.

onclicklisteners 및 ontouchlisteners를 이미지 뷰에 추가 할 수도 있습니다. 예 : OnClick 리스너가 일부 작업을 수행하고 Ontouchlisteners가 화면을 따라 이미지를 이동합니다.

관련 문제