activity悬浮效果的实现
来源:互联网 发布:哈扎尔辞典 知乎 编辑:程序博客网 时间:2024/06/06 05:04
先上效果图:
效果图看完 来总结实现
目前知道的两种方法:
1、将悬浮的activity样式改为dialog样式,
android:theme="@style/Base.Theme.AppCompat.Light.Dialog"这个样式的宽高是内容包裹,显示出来的效果不好看,需要自己去修改它的样式。
2、使用WindowManager去设置activity的宽高,再把背景设为透明,就是一个悬浮效果。
下面上代码:
首先第一个activity的布局:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" 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="example.com.floattest.MainActivity"> <android.support.design.widget.FloatingActionButton android:id="@+id/fab_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/add" android:layout_alignParentRight="true" android:layout_alignParentBottom="true"/></RelativeLayout>
使用了Material Design中的悬浮按钮,它是Design Support库中的一个控件,要使用Design Support库,在app下的gradle中添加如下:
compile 'com.android.support:design:25.1.1'
activity
package example.com.floattest;import android.content.Intent;import android.support.design.widget.FloatingActionButton;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;public class MainActivity extends AppCompatActivity { private FloatingActionButton fab; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fab = (FloatingActionButton)this.findViewById(R.id.fab_add); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this,FloatActivity.class); startActivity(intent); } }); }}
第二个activity的布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView></LinearLayout>用RecyclerView做一个列表显示
activity
package example.com.floattest;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.Display;import android.view.Gravity;import android.view.MotionEvent;import android.view.WindowManager;import java.util.ArrayList;import java.util.List;/** * Created by csjy on 2017/6/30. */public class FloatActivity extends AppCompatActivity { private RecyclerView recyclerView; private List<String> mList; private RecyclerViewAdapter adapter; private WindowManager manager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_float); manager = getWindowManager(); Display display = manager.getDefaultDisplay(); WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); layoutParams.height = (int) (display.getHeight() * 0.95); layoutParams.width = (int) (display.getWidth() * 0.8); layoutParams.gravity = Gravity.CENTER_VERTICAL; getWindow().setAttributes(layoutParams); recyclerView = (RecyclerView)this.findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(this)); initData(); adapter = new RecyclerViewAdapter(this,mList); recyclerView.setAdapter(adapter); } private void initData() { mList = new ArrayList<String>(); for (int i = 0; i < 100; i++){ mList.add("Text" + i); } } //点击空白处返回上一个activity @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN){ if (getCurrentFocus() != null && getCurrentFocus().getWindowToken() != null){ finish(); } } return super.onTouchEvent(event); }}
首先实例化WindowManager,通过WindowManager的getDefaultDisplay()方法实例化Display,Display提供窗口的大小及密度等有关信息。再通过WindowManager的LayoutParams设置一些宽高等属性。这里将activity的高设置为窗口大小的0.95倍,宽为窗口大小的0.8倍。然后实例化RecyclerView,添加数据。接下来添加手势相应事件,当点击activity以外的区域返回上一个activity,也就是销毁这个activity。
最后将悬浮的activity的样式改为:
android:theme="@style/Transparent"其中Transparent的样式如下:
<style name="Transparent" parent="Theme.AppCompat.Light"> <item name="android:windowIsTranslucent">true</item><!--透明--> <item name="android:backgroundDimEnabled">true</item><!--模糊--> <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item> <!--activity出现动画--> </style>
完毕。
源码下载
阅读全文
0 0
- activity悬浮效果的实现
- 实现悬浮效果的方法
- Activity顶部悬浮效果
- Activity底部悬浮效果
- 悬浮窗的实现(如360悬浮窗效果)
- 悬浮窗的实现(如360悬浮窗效果)
- Android悬浮窗效果的实现
- android---常驻悬浮框效果的实现
- 利用bootstrap实现悬浮窗口的效果
- 利用bootstrap实现悬浮窗口的效果
- android 悬浮activity实现
- 悬浮的Activity
- js的悬浮效果
- 实现activity变暗的效果
- 实现activity变暗的效果
- 实现Activity的透明效果
- Android不依赖Activity的全局悬浮窗实现
- Android 不依赖activity的全局悬浮窗实现
- Windows程序设计
- java 下载远程电脑文件到本地电脑
- python笔记-012-文件和异常
- java 连接虚拟机上的mongoDB并进行小测试
- httpclient学习之在博客发表评论,跳过登录
- activity悬浮效果的实现
- RabbitMQ之arguments参数
- JS最新手机号码检验正则表达式
- 【备忘】2017北京黑马19期javaee+大数据 【完整版】含解压密码
- 十二、深入理解JSX
- js模拟实现重载
- 设计模式之中介者模式
- 端口分类调研
- OC与swift相互调用