下面的示例是仿QQ音乐之类的歌词栏,可以进行拖动和隐藏,代码如下:

MainActivity:

package com.home.danglingactivity;import android.app.Activity;import android.content.Context;import android.graphics.Rect;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.view.WindowManager;import android.view.WindowManager.LayoutParams;import android.widget.Button;public class MainActivity extends Activity implements OnClickListener {private MyTextView tv;private Button btn;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);btn = (Button) findViewById(R.id.main_btn);btn.setOnClickListener(this);}@Overridepublic void onClick(View v) {if (tv != null && tv.isShown()) {hide();} else {show();}}/** * 隐藏显示歌词的TextView */private void hide() {WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);wm.removeView(tv);btn.setText("显示歌词");}/** * 显示悬浮的TextView */private void show() {Rect frame = new Rect();getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);MyTextView.TOOL_BAR_HIGH = frame.top;WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);WindowManager.LayoutParams params = MyTextView.params;params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT| WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;params.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL| LayoutParams.FLAG_NOT_FOCUSABLE;params.width = WindowManager.LayoutParams.FILL_PARENT;params.height = WindowManager.LayoutParams.WRAP_CONTENT;params.alpha = 80;params.gravity = Gravity.LEFT | Gravity.TOP;// 设置x、y初始值params.x = 0;params.y = wm.getDefaultDisplay().getHeight();tv = new MyTextView(MainActivity.this);wm.addView(tv, params);btn.setText("隐藏歌词");}@Overrideprotected void onDestroy() {WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);if (tv != null && tv.isShown()) {wm.removeView(tv);}super.onDestroy();}}

MyTextView:

package com.home.danglingactivity;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.LinearGradient;import android.graphics.Paint;import android.graphics.Shader;import android.graphics.Shader.TileMode;import android.graphics.Typeface;import android.view.MotionEvent;import android.view.WindowManager;import android.widget.TextView;public class MyTextView extends TextView {private final String TAG = MyTextView.class.getSimpleName();public static int TOOL_BAR_HIGH = 0;public static WindowManager.LayoutParams params = new WindowManager.LayoutParams();private float startX;private float startY;private float x;private float y;private String text = "我是不是你最疼爱的人,你为什么不说话,握住是你冰冷的手动也不动让我好难过";;private float float1 = 0.0f;private float float2 = 0.01f;WindowManager wm = (WindowManager) getContext().getApplicationContext().getSystemService(Context.WINDOW_SERVICE);public MyTextView(Context context) {super(context);this.setBackgroundColor(Color.argb(100, 140, 160, 150));}@Overridepublic boolean onTouchEvent(MotionEvent event) {// 触摸点相对于屏幕左上角坐标x = event.getRawX();y = event.getRawY() - TOOL_BAR_HIGH;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;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);float1 += 0.001f;float2 += 0.001f;if (float2 > 1.0) {float1 = 0.0f;float2 = 0.01f;}this.setText("");float len = this.getTextSize() * text.length();Shader shader = new LinearGradient(0, 0, len, 0, new int[] {Color.YELLOW, Color.RED }, new float[] { float1, float2 },TileMode.CLAMP);Paint p = new Paint();p.setShader(shader);p.setTypeface(Typeface.DEFAULT_BOLD);canvas.drawText(text, 0, 10, p);}/** * 更新浮动窗口位置参数 */private void updatePosition() {// View的当前位置params.x = (int) (x - startX);params.y = (int) (y - startY);wm.updateViewLayout(this, params);}}

布局xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <Button        android:id="@+id/main_btn"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center"        android:text="显示歌词" /></LinearLayout>

权限:

  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />  <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />





更多相关文章

  1. TextUtils用法
  2. android 如何给图片添加水印
  3. Android(安卓)RecyclerView:设置指定位置的两种方法
  4. android中重写onTouchEvent分别实现点击和滑动事件
  5. 改变Android(安卓)对话框位置及边框
  6. Android(安卓)Map Api 使用和开发(1) 添加地图和界面
  7. Android歌词秀设计思路(6)运用Proxy设计模式简化歌词播放服务的使
  8. Android(安卓)mp3 LyricView
  9. Android(安卓)MP3音乐播放器总结

随机推荐

  1. Android(安卓)9 安卓P System-as-root
  2. 编译cubieboard android 源码过程详解之(
  3. 保存和重入Activity 状态的最简单方法
  4. Android(安卓)Jetpack之LiveData源码分析
  5. Android(安卓)自动更新 + IIS7 添加APK m
  6. Android(安卓)事件处理
  7. 【Android】View类详解 (游戏开发必备)
  8. Android-Task Affinity
  9. Android自带音乐播放器专辑图片相同的问
  10. 使用Manifest Editor