效果:
实现Activity在另外一个Activity的上面浮动,背景透明。同时该浮动的Activity是可拖动的。
实现过程:
创建MainDragActivity Layout:
activity_main_drag.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
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);
}
});