[목표]
- 메인 액티비티에서 투명 액티비티를 띄운다.
- 투명 액티비티에 버튼을 하나 넣고, 터치하면 간단하게 Toast 메시지를 띄운다.
- 버튼 이외의 투명 공간을 터치하면, 투명 액티비티를 종료한다.
[투명 액티비티를 위한 style 만들기]
/res/values/style.xml 파일을 생성해서, 아래의 코드를 삽입한다.
name으로 지정한, "Theme.Transparent"는 투명 액티비티를 생성할 때, AndroidManifest.xml에서 사용될 이름이다.
<resources> <style name="Theme.Transparent" parent="android:Theme"> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:colorBackgroundCacheHint">@null</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowAnimationStyle">@android:style/Animation</item> <item name="android:windowNoTitle">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:backgroundDimEnabled">true</item> </style> </resources>
Line 09 : "<item name="android:backgroundDimEnabled">true</item>" 설정은 투명 액티비티의 빈공간의 Dim(어둑한) 처리 여부를 지정한다. true일 경우, 빈 공간이 약간 어두운 톤으로 채워진다. false일 경우 깔끔하게 투명처리된다.
[정의한 투명 Theme, 액티비티에 적용하기]
이제, 아래와 같이 AndroidManifest.xml에 투명액티비티를 새로 정의한다.
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > ... <activity android:label="@string/app_name" android:name=".TransparentActivity" android:theme="@style/Theme.Transparent"> </activity> </application>
안드로이드에서 제공하는 투명 윈도우 테마를 사용할 수도 있는데,
8번 라인을 아래 코드로 대체하면 되지만, 세밀한 설정을 위해서라면 사용자가 직접 정의해서 사용해야 한다.
android:theme="@android:style/Theme.Translucent.NoTitleBar"
[투명 액티비티 구현하기]
이제, 투명 액티비티 클래스를 만든다.
public class TransparentActivity extends Activity implements OnClickListener { private int mDeviceScreenWidth; private int mDeviceScreenHeight; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.transparent_activity); Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); mDeviceScreenWidth = display.getWidth(); mDeviceScreenHeight = display.getHeight(); ImageButton btnAuth = (ImageButton) findViewById(R.id.imgbtn_do_sth); btnAuth.setOnClickListener(this); } @Override public void onClick(View v) { int id = v.getId(); switch (id) { case R.id.imgbtn_do_sth: Toast.makeText(this, "Button Clicked!!!!", Toast.LENGTH_SHORT).show(); break; default: break; } } @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { int x = (int)event.getX(); int y = (int)event.getY(); Bitmap bitmapScreen = Bitmap.createBitmap(mDeviceScreenWidth, mDeviceScreenHeight, Bitmap.Config.ARGB_8888); if(x < 0 || y < 0) return false; int ARGB = bitmapScreen.getPixel(x, y); if(Color.alpha(ARGB) == 0) { finish(); } return true; } return false; } }
Line 12,13 : 디바이스의 화면 크기를 미리 기억해둔다.
Line 24 : 버튼을 클릭하면 간단히 Toast 메시지를 띄운다.
Line 32 : 버튼을 제외한 투명한 공간을 터치했을 때의 동작을 정의한다. 터치한 위치의 RGB값이 투명한 경우 Activity를 종료(finish())한다.
[다운로드]
전체코드
[참고자료(이미지)]
http://trac.pcbsd.org/browser/pcbsd/branches/7.1/system-overlay/PCBSD/local/kde4/share/apps/ksplash/Themes/Galileo/600x400/background.png?rev=3811
http://www.iconarchive.com/show/blawb-icons-by-arrioch/android-icon.html
'Android' 카테고리의 다른 글
[Android] Animated "ListView" Demo (0) | 2012.01.19 |
---|---|
[Android] BroadcastReceiver 동적으로 등록하기 (2) | 2012.01.17 |
[Android] Activity "생명주기" 관련 테스트 (14) | 2012.01.12 |
[Android] Device Screen 관련 용어 정리 (0) | 2012.01.11 |
[Android] onTouch 사용시, "ACTION_DOWN"만 들어오는 문제 (5) | 2012.01.09 |