效果:
java
實現Activity在另一個Activity的上面浮動,背景透明。同時該浮動的Activity是可拖動的。android
實現過程:app
建立MainDragActivity Layout:ide
activity_main_drag.xmlthis
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"spa
xmlns:tools="http://schemas.android.com/tools"orm
android:layout_width="match_parent"xml
android:layout_height="match_parent"get
android:paddingBottom="@dimen/activity_vertical_margin"qt
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainDragActivity" >
<TextView
android:id="@+id/title_drag"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="@color/light_bar_02"
android:gravity="center"
android:padding="15dp"
android:text="@string/hello_world"
android:textSize="20sp" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/title_drag"
android:layout_centerHorizontal="true"
android:layout_marginTop="5dp"
android:ems="10" >
<requestFocus />
</EditText>
</RelativeLayout>
建立浮動的Activity代碼MainDrapActivity.java
package com.qqtech.ucstartest;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.TextView;
/**
* 實現Activity懸浮和拖拽
* @author rwl_bjb
*
*/
public class MainDragActivity extends Activity {
int mActivityWindowWidth = 600; //activity寬度
int mActivityWindowHeight = 500; //activity高度
int width = 0; //屏幕寬度
int height = 0; //屏幕高度
private TextView titleDrag = null;
private float x;
private float y;
private float startX;
private float startY;
private View view;
private WindowManager.LayoutParams lp;
private String TAG = MainDragActivity.class.getName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_drag);
titleDrag = (TextView)findViewById(R.id.title_drag);
titleDrag.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent event) {
x = event.getRawX();
y = event.getRawY();
Log.d(TAG, "------X: "+ x +"------Y:" + y);
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
updatePosition();
break;
case MotionEvent.ACTION_UP:
updatePosition();
startX = startY = 0;
break;
}
return true;
}
});
}
private void updatePosition(){
// View的當前位置
int xmove = (int)( x - startX);
int ymove = (int) (y - startY);
Log.i(TAG, "計算位置:" + xmove + " " + ymove);
lp.x = mActivityWindowWidth/2 - width/2 + xmove;
lp.y = mActivityWindowHeight/2 - height/2 + ymove;
getWindowManager().updateViewLayout(view, lp);
}
@Override
public void onAttachedToWindow() {
// TODO Auto-generated method stub
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
width = wm.getDefaultDisplay().getWidth();
height = wm.getDefaultDisplay().getHeight();
super.onAttachedToWindow();
view = getWindow().getDecorView();
lp = (WindowManager.LayoutParams) view.getLayoutParams();
//lp.gravity = Gravity.CENTER;
//lp.gravity = Gravity.TOP;
lp.width = mActivityWindowWidth;
lp.height = mActivityWindowHeight;
lp.x = mActivityWindowWidth/2 - width/2;
lp.y = mActivityWindowHeight/2 - height/2;
getWindowManager().updateViewLayout(view, lp);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main_drag, menu);
return true;
}
}
建立theme,修改style.xml:
<resources>
<style name="MainDragActivityTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowCloseOnTouchOutside">false</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:backgroundDimEnabled">true</item>
</style>
</resources>
設置AndroidMainfest.xml:
<activity
android:name="com.qqtech.ucstartest.MainDragActivity"
android:label="@string/title_activity_main_drag"
android:theme="@style/MainDragActivityTheme" >
</activity>
在前一個Activity中調用:
testBtn01.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, MainDragActivity.class);
startActivity(intent);
}
});