Android 仿ios屏幕右边的圆圈

public class TopFloatService extends Service implements OnClickListener,OnKeyListener{

WindowManager wm = null;

WindowManager.LayoutParams ballWmParams = null;

private View ballView;

private View menuView;

private float mTouchStartX;

private float mTouchStartY;

private float x;

private float y;

private RelativeLayout menuLayout;

private Button floatImage;

private PopupWindow pop;

private RelativeLayout menuTop;

private boolean ismoving = false;

private TextView btn_home_screen;

private TextView btn_apps;

private TextView btn_lock_screen;

private TextView btn_setting;

private TextView btn_favor;

/**

 * 屏幕锁屏

 */

private DevicePolicyManager policyManager;

private ComponentName componentName;

@Override

public void onCreate() {

super.onCreate();

 //获取设备管理服务

policyManager=(DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);

componentName=new ComponentName(getApplicationContext(),LockReceiver.class);

//加载辅助球布局

ballView = LayoutInflater.from(this).inflate(R.layout.floatball, null);

floatImage = (Button)ballView.findViewById(R.id.float_image);

setUpFloatMenuView();

createView();

}

/**

 * 窗口菜单初始化

 */

private void setUpFloatMenuView(){

menuView = LayoutInflater.from(this).inflate(R.layout.floatmenu, null);

menuLayout = (RelativeLayout)menuView.findViewById(R.id.menu);

menuTop = (RelativeLayout)menuView.findViewById(R.id.lay_main);

menuLayout.setOnClickListener(this);

menuLayout.setOnKeyListener(this);

menuTop.setOnClickListener(this);

//初始化

btn_apps=(TextView)menuView.findViewById(R.id.btn_apps);

btn_favor=(TextView)menuView.findViewById(R.id.btn_favor);

btn_home_screen=(TextView)menuView.findViewById(R.id.btn_home_screen);

btn_lock_screen=(TextView)menuView.findViewById(R.id.btn_lock_screen);

btn_setting=(TextView)menuView.findViewById(R.id.btn_setting);

//添加点击事件

btn_apps.setOnClickListener(this);

btn_favor.setOnClickListener(this);

btn_home_screen.setOnClickListener(this);

btn_lock_screen.setOnClickListener(this);

btn_setting.setOnClickListener(this);

}

/**

 * 通过MyApplication创建view,并初始化显示参数

 */

private void createView() {

wm = (WindowManager) getApplicationContext().getSystemService("window");

ballWmParams =  ((MyApplication) getApplication()).getMywmParams();

ballWmParams.type = WindowManager.LayoutParams.TYPE_PHONE;

ballWmParams.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;

ballWmParams.gravity = Gravity.LEFT | Gravity.TOP;

ballWmParams.x = 0;

ballWmParams.y = 0;

ballWmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;

ballWmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;

ballWmParams.format = PixelFormat.RGBA_8888;

//添加显示层

wm.addView(ballView, ballWmParams);

//注册触碰事件监听器

floatImage.setOnTouchListener(new OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) {

x = event.getRawX();

y = event.getRawY(); 

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

ismoving = false;

mTouchStartX = (int)event.getX();

mTouchStartY = (int)event.getY();

break;

case MotionEvent.ACTION_MOVE:

ismoving = true;

updateViewPosition();

break;

case MotionEvent.ACTION_UP:

mTouchStartX = mTouchStartY = 0;

break;

}

//如果拖动则返回false,否则返回true

if(ismoving == false){

return false;

}else{

return true;

}

}

});

//注册点击事件监听器

floatImage.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

DisplayMetrics dm = getResources().getDisplayMetrics();

pop = new PopupWindow(menuView, dm.widthPixels, dm.heightPixels);

pop.showAtLocation(ballView, Gravity.CENTER, 0, 0);

pop.update();

}

});

}

/**

 * 更新view的显示位置

 */

private void updateViewPosition() {

ballWmParams.x = (int) (x - mTouchStartX);

ballWmParams.y = (int) (y - mTouchStartY);

wm.updateViewLayout(ballView, ballWmParams);

}

@Override

public IBinder onBind(Intent intent) {

return null;

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btn_apps:

Intent intent= new Intent("android.intent.action.DIAL");  

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

intent.setClassName("com.android.contacts","com.android.contacts.DialtactsActivity");     

startActivity(intent);

break;

        

case R.id.btn_favor:

break;

case R.id.btn_home_screen:

Intent mHomeIntent=new Intent(Intent.ACTION_MAIN);

mHomeIntent.addCategory(Intent.CATEGORY_HOME);

mHomeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

startActivity(mHomeIntent);

break;

case R.id.btn_lock_screen:

lock();

android.os.Process.killProcess(android.os.Process.myPid());

break;

case R.id.btn_setting:

Intent mSetting=new Intent(Intent.ACTION_MAIN);

mSetting.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

startActivity(mSetting);

// cm=new ComponentName("com.android.settings","com.android.settings.Settings");

//
Intent mSetting=new Intent(Settings.ACTION_APN_SETTINGS);

//
mSetting.setComponent(cm);

     

        startActivity(mSetting);

break;

default:

if(pop!=null && pop.isShowing()){

pop.dismiss();

}

break;

}

}

/**

 * 锁屏

 */

  public void lock(){

  boolean active=policyManager.isAdminActive(componentName);

  if(!active){  //若无权限  

  activeManager();  //去获得权限  

  policyManager.lockNow();   //并锁屏  

  }

  if(active){

  policyManager.lockNow();  //直接锁屏 

  }

  }

  

  /**

   * 获得权限

   */

  public void activeManager(){

      //使用隐式意图调用系统方法来激活指定的设备管理器 

  Intent intent=new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);

  //权限列表

  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

  intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);

  intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "一键锁屏");

   startActivity(intent);

   

  }

@Override

public boolean onKey(View v, int keyCode, KeyEvent event) {

Toast.makeText(getApplicationContext(), "keyCode:"+keyCode, 1000).show();

switch (keyCode) {

case KeyEvent.KEYCODE_HOME:

pop.dismiss();

break;

case KeyEvent.KEYCODE_BACK:

pop.dismiss();

default:

break;

}

return true;

}

}

页面代码:

  <RelativeLayout

            android:id="@+id/lay_main"

            android:layout_width="fill_parent"

            android:layout_height="fill_parent"

            android:orientation="vertical"

            android:padding="4.0px"

            android:visibility="visible" >

            <TextView

                android:id="@+id/btn_apps"

                style="@style/Icon"

                android:layout_centerInParent="true"

                android:drawableTop="@drawable/selector_ic_apps"

                android:text="@string/apps" />

            <TextView

                android:id="@+id/btn_home_screen"

                style="@style/Icon"

                android:layout_alignParentBottom="true"

                android:layout_centerHorizontal="true"

                android:drawableTop="@drawable/selector_ic_home"

                android:text="@string/home_screen" />

            <TextView

                android:id="@+id/btn_setting"

                style="@style/Icon"

                android:layout_alignParentRight="true"

                android:layout_centerVertical="true"

                android:drawableTop="@drawable/selector_ic_phone"

                android:text="@string/setting" />

            <TextView

                android:id="@+id/btn_lock_screen"

                style="@style/Icon"

                android:layout_centerHorizontal="true"

                android:drawableTop="@drawable/selector_ic_power_down"

                android:text="@string/lock_screen" />

            <TextView

                android:id="@+id/btn_favor"

                style="@style/Icon"

                android:layout_alignParentLeft="true"

                android:layout_centerVertical="true"

                android:drawableTop="@drawable/selector_ic_star"

                android:text="@string/favor" />

        </RelativeLayout>

源码下载:http://download.csdn.net/detail/linhaosheng123456/9269139

时间: 2024-10-20 16:32:54

Android 仿ios屏幕右边的圆圈的相关文章

滑动-android 仿ios appstore精品推荐界面

问题描述 android 仿ios appstore精品推荐界面 求类似appstore精品推荐界面实现 快速滑动时候,当到达顶部后,广告栏不动,下面的布局能够继续滑动回弹的效果

Android仿IOS自定义AlertDialog提示框

本文介绍的仿IOS对话框的实现,先来看一下效果图 具体代码如下: public class AlertDialog { private Context context; private Dialog dialog; private LinearLayout lLayout_bg; private TextView txt_title; private TextView txt_msg; private Button btn_neg; private Button btn_pos; private

android仿ios开关按钮

前一段时间在做项目的时候遇到了一个问题,美工在设计的时候设计的是一个iPhone中的开关,但是都知道Android中的Switch开关和IOS中的不同,这样就需要通过动画来实现一个iPhone开关了. 通常我们设置界面采用的是PreferenceActivity [html] view plaincopyprint? package me.imid.movablecheckbox;      import android.os.Bundle;   import android.preferenc

android仿ios时间控件

: 源码地址:http://download.csdn.net/detail/baiyuliang2013/8760159 上下午时间段: 时分时间段: 源码地址:http://download.csdn.net/detail/baiyuliang2013/8760347

高仿IOS的Android弹出框_IOS

先看一下效果图,不过这是网上的图片. 效果不错,就借此拿来与大伙分享分享. github源码地址:https://github.com/saiwu-bigkoo/Android-AlertView. 1.怎么用:添加依赖. compile 'com.bigkoo:alertview:1.0.3' 2.实例demo(大家可以根据需要来选择自己需要的框框). package com.example.my.androidalertview; import android.app.Activity; i

Android仿淘宝view滑动至屏幕顶部会一直停留在顶部的位置_Android

在刚刚完成的项目中,在一个页面中,用户体验师提出引用户操作的入住按钮要一直保留在页面当中,不管页面能滚动多长都得停留在页面的可视区域.最终实现效果如下图所示:   如图中的红色框中的view始终会停留在页面中,如果滑动至页面的顶部,会一直保留在顶部. 下面来说下具体的实现思路: 思路:其实整个页面当中一共有两个视觉效果一样的View,通过滑动的位置来进行View的隐藏和显示来达到这种效果.整个页面的在上下滑动的过程中可以总结为两个状态,状态A(如图1所示),view2在可视区域内时,view1不

Android仿微信清理内存图表动画(解决surfaceView屏幕闪烁问题)demo实例详解_Android

最近接了一个项目其中有功能要实现一个清理内存,要求和微信的效果一样.于是想到用surfaceView而不是继承view.下面小编给大家解析下实现思路. surfaceView是为了解决频繁绘制动画产生了闪烁,而采用了双缓冲机制,即A.B两个缓冲轮流显示在画布上,同时,使用不当,同样容易产生闪烁,这是由于A.B中有一个缓冲没有改变. 在我写这个view的时候就遇到了这个问题,研究了好久终于解决. 首先说一下思路: 微信清理缓存的动画是: 一个圆环不停的转动,同时中间有文字显示-->加载完成后,出现

Android开发实现带有反弹效果仿IOS反弹scrollview教程详解_Android

首先给大家看一下我们今天这个最终实现的效果图:   这个是ios中的反弹效果.当然我们安卓中如果想要实现这种效果,感觉不会那么生硬,滚动到底部或者顶部的时候.当然 使用scrollview是无法实现的.所以我们需要新建一个view继承ScrollView package davidbouncescrollview.qq986945193.com.davidbouncescrollview; import android.annotation.SuppressLint; import androi

Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框

今天给大家带来一个很实用的小控件ClearEditText,就是在Android系统的输入框右边加入一个小图标,点击小图标可以清除输入框里面的内容,IOS上面直接设置某个属性就可以实现这一功能,但是Android原生EditText不具备此功能,所以要想实现这一功能我们需要重写EditText,接下来就带大家来实现这一小小的功能 我们知道,我们可以为我们的输入框在上下左右设置图片,所以我们可以利用属性android:drawableRight设置我们的删除小图标,如图 我这里设置了左边和右边的图