Android实现Activity浮动和可拖拽

效果:

实现Activity在另外一个Activity的上面浮动,背景透明。同时该浮动的Activity是可拖动的。

095022_nPuH_184206.png


实现过程:

创建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(viewlp);

        

    }

    

    

    @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(viewlp);

    }

    

    

    @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);

            }

        });  


转载于:https://my.oschina.net/u/184206/blog/517379

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值