设为首页 加入收藏

TOP

Android浮动小球与开机自启动(一)
2015-07-26 13:14:07 来源: 作者: 【 】 浏览:47
Tags:Android 浮动 小球 开机 启动

  看着手机上的360浮动小球,不评价其具体的功能与实用性,至少在UI设计与交互方面是个不小的创新。



  如图片左上角所示,球中还会显示当前手机的运行状况,向下拉动还会有弹射来达到加速、清理等目的。


  那好,先来实现一个类似的小球(仅限于形状,功能你懂得)。


  查阅了相关资料,整个界面除了小球以外,其他部分均是做透明处理。



  要想在应用中被启动为一个Activity或Service,需要注册,这里是Service:



  2、界面透明化处理,整体代码如下:


?


package com.XXX.autostart;


import android.view.View;


import android.app.Service;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.os.Handler;
import android.os.IBinder;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.WindowManager.LayoutParams;
import android.widget.ImageButton;
import android.widget.LinearLayout;


public class Service1 extends Service
{
? ? LinearLayout mFloatLayout;
? ? WindowManager.LayoutParams wmParams;
? ? WindowManager mWindowManager;


? ? ImageButton mFloatView;


? ? @Override
? ? public void onCreate()
? ? {
? ? ? ? // TODO Auto-generated method stub
? ? ? ? super.onCreate();


? ? ? ? createFloatView();
? ? }


? ? @Override
? ? public IBinder onBind(Intent intent)
? ? {
? ? ? ? // TODO Auto-generated method stub
? ? ? ? return null;
? ? }


? ? private void createFloatView()
? ? {
? ? ? ? wmParams = new WindowManager.LayoutParams();


? ? ? ? mWindowManager = (WindowManager)getApplication().getSystemService(getApplication().WINDOW_SERVICE);


? ? ? ? wmParams.type = LayoutParams.TYPE_PHONE;
? ? ? ? wmParams.format = PixelFormat.RGBA_8888;


? ? ? ? wmParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE;


? ? ? ? wmParams.gravity = Gravity.LEFT | Gravity.TOP;


? ? ? ? wmParams.x = 0;
? ? ? ? wmParams.y = 0;


? ? ? ? wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
? ? ? ? wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;


? ? ? ? LayoutInflater inflater = LayoutInflater.from(getApplication());
? ? ? ? mFloatLayout = (LinearLayout) inflater.inflate(R.layout.float_layout, null);


? ? mWindowManager.addView(mFloatLayout, wmParams);


? ? ? ? mFloatView = (ImageButton)mFloatLayout.findViewById(R.id.float_id);


? ? ? ? mFloatLayout.measure(View.MeasureSpec.makeMeasureSpec(0,
? ? ? ? View.MeasureSpec.UNSPECIFIED), View.MeasureSpec
? ? ? ? ? ? ? ? .makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));



? ? ? ? mFloatView.setOnTouchListener(new OnTouchListener() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public boolean onTouch(View v, MotionEvent event) {
? ? ? ? ? ? ? ? // TODO Auto-generated method stub


? ? ? ? ? ? ? ? wmParams.x = (int) event.getRawX() - mFloatView.getMeasuredWidth() / 2;


? ? ? ? ? ? ? ? wmParams.y = (int) event.getRawY() - mFloatView.getMeasuredHeight() / 2 - 25;


? ? ? ? mWindowManager.updateViewLayout(mFloatLayout, wmParams);
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? });


? ? ? ? mFloatView.setOnClickListener(new OnClickListener() {


? ? ? ? ? ? @Override
? ? ? ? ? ? public void onClick(View v) {
? ? ? ? ? ? ? ? // TODO Auto-generated method stub
? ? ? ? ? ? ? ? mFloatView.setVisibility(View.INVISIBLE);


? ? ? ? ? ? ? ? Handler handler = new Handler();
? ? ? ? ? ? ? ? handler.postDelayed(new Runnable() {
? ? ? ? ? ? ? ? ? ? public void run() {
? ? ? ? ? ? ? ? ? ? ? ? mFloatView.setVisibility(View.VISIBLE);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }, 3000);


? ? ? ? ? ? }
? ? ? ? });
? ? }


? ? @Override
? ? public void onDestroy()
? ? {
? ? ? ? // TODO Auto-generated method stub
? ? ? ? super.onDestroy();
? ? ? ? if(mFloatLayout != null)
? ? ? ? {
? ? ? ? ? ? mWindowManager.removeView(mFloatLayout);
? ? ? ? }
? ? }


}


  这里是

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android应用程序模拟手机按键 下一篇Struts2学习笔记-Value Stack(值..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: