2010-11-26 2 views
14

는 사람이 어떻게 여기에 하나 같은 밝기 화면 필터를 구현하는 아이디어가 있습니까 :밝기 화면 필터

http://www.appbrain.com/app/screen-filter/com.haxor

나는 출발점이 필요하고 나는 그것을 수행하는 방법을 알아낼 수 없습니다.

+0

나는 동일한 문제에 직면 해있다. 나는 또한이 질문을 게시했다. http://stackoverflow.com/questions/2222146/control-screen-brightness-in-android-using-background-service. 문제를 해결할 수있었습니다. U는 게시물에서 올바른 방법을 볼 수 있습니다. –

+0

이 링크를 클릭하면 도움이 될만한 정보를 얻을 수 있습니다. http://android-er.blogspot.com/2011/02/change-android-screen-brightness.html –

답변

8

터치가 통과 할 수 있도록 투명하게 전체 화면으로 작업하기 만하면됩니다.

다음
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/background" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#33000000"> 
</LinearLayout> 

하는 조정 : 그냥 투명 배경으로 전체 화면의 LinearLayout을 사용하여 main.xml에 레이아웃 파일의 경우

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    Window window = getWindow(); 

    // Let touches go through to apps/activities underneath. 
    window.addFlags(FLAG_NOT_TOUCHABLE); 

    // Now set up content view 
    setContentView(R.layout.main); 
} 

다음있는 contentView를 설정하기 전에 터치 사용을 통해 다음과 같은 윈도우 플래그를 전달 만들려면

findViewById(R.id.background).setBackgroundColor(0x66000000); 
+0

감사합니다. 투명도 설정과 관련되어 있지만 터치가 필요합니다. 이벤트가 이상하게 작동하는 것처럼 보일 수 있지만 스크롤 할 수는 있지만 프로그램 아이콘을 클릭하면 동결 (프로그램이 열리지는 않지만 동결되지 않은 것 같습니다.) – Alex

+0

다른 아이디어가 있습니까? 솔루션 – Alex

+0

누구든지 제발 :)? – Alex

0

당신은이 시도 CA : : "밝기는"단지 어딘가에 코드에서 배경 색상의 값을 변경

당신이 사용할 수 없습니다 물론
protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     setContentView(R.layout.max_bright); 



     WindowManager.LayoutParams lp = getWindow().getAttributes(); 

     lp.screenBrightness = 100/100.0f; 

     getWindow().setAttributes(lp); 

    } 
1

이 생산 코드입니다,하지만 당신은 장난 경우 ..이 Undocumented hack

그것은 사용하려고 :

private void setBrightness(int brightness) { 
try { 
    IHardwareService hardware = IHardwareService.Stub.asInterface(
    ServiceManager.getService("hardware")); 
    if (hardware != null) { 
    hardware.setScreenBacklight(brightness); 
    } 
} catch (RemoteException doe) {   
    }   
} 

는이 권한을 사용하는 기억 :

<uses-permission android:name="android.permission.HARDWARE_TEST"/> 
+1

어디에서 hardware09.jar을 찾을 수 있습니까? 이 튜토리얼 (http://www.tutorialforandroid.com/2009/01/changing-screen-brightness.html) – noobProgrammer

+0

실제로이 링크는 깨졌습니다. – Device

4
  • 인스턴스를 가져옵니다 WindowManager의. 터치로 전달되도록

    WindowManager windowManager = (WindowManager) Class.forName("android.view.WindowManagerImpl").getMethod("getDefault", new Class[0]).invoke(null, new Object[0]);

  • 전체 화면 레이아웃 XML을 생성 (fill_parent로 설정 레이아웃 매개 변수)

  • 는 등을 클릭 할 수 없습니다, 포커스하지, 얼마 클릭으로보기를 설정 앱과 앱이이를 감지 할 수 있습니다.

    view.setFocusable(false);
    view.setClickable(false);
    view.setKeepScreenOn(false);
    view.setLongClickable(false);
    view.setFocusableInTouchMode(false);

  • 유형 android.view.WindowManager.LayoutParams의 레이아웃 매개 변수를 만듭니다. 높이와 같은 LayoutParams layoutParams = new LayoutParams();

  • 설정 레이아웃 매개 변수, 폭 등

    layoutParams.height = LayoutParams.FILL_PARENT; 
    layoutParams.width = LayoutParams.FILL_PARENT; 
    layoutParams.flags = 280; // You can try LayoutParams.FLAG_FULLSCREEN too 
    layoutParams.format = PixelFormat.TRANSLUCENT; // You can try different formats 
    layoutParams.windowAnimations = android.R.style.Animation_Toast; // You can use only animations that the system to can access 
    layoutParams.type = LayoutParams.TYPE_SYSTEM_OVERLAY; 
    layoutParams.gravity = Gravity.BOTTOM; 
    layoutParams.x = 0; 
    layoutParams.y = 0; 
    layoutParams.verticalWeight = 1.0F; 
    layoutParams.horizontalWeight = 1.0F; 
    layoutParams.verticalMargin = 0.0F; 
    layoutParams.horizontalMargin = 0.0F; 
    
  • 주요 단계 : 당신은 당신이 필요로하는 밝기의 비율을 설정할 수 있습니다. layoutParams.setBackgroundDrawable(getBackgroundDrawable(i));

    private Drawable getBackgroundDrawable(int i) { 
    int j = 255 - (int) Math.round(255D * Math.exp(4D * ((double) i/100D) - 4D)); 
    return new ColorDrawable(Color.argb(j, 0, 0, 0));} 
    
  • 마지막으로 이전에 만든 창 관리자에보기를 추가 할 수 있습니다.

    windowManager.addView(view, layoutParams);

참고 : 화면에 오버레이를 배치하는 SYSTEM_ALERT_WINDOW 권한이 필요합니다.

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 

테스트를 마쳤습니다. 네가 붙어 있다면 알려줘.

+0

이 [질문]에 대한 완전한 대답을 게시 할 수 있습니까 http://stackoverflow.com/questions/22748031/create-a-simple-screen-filter) 예제를 사용하여 높게 평가됩니다 – noobProgrammer

관련 문제