package cn.qylk.myview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Shader.TileMode;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
public class DesktopLrc extends LrcViewBase implements View.OnTouchListener {
private WindowManager mWM;
private Paint[] paint;
private WindowManager.LayoutParams wmParams;
public DesktopLrc(Context context) {
this(context, null, 0);
}
public DesktopLrc(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public DesktopLrc(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
super.setLrcTextSize(20.0f);
super.setGap(5);
paint = new Paint[] { ncPaint, cPaint };
newWindow(context);
}
public void destoryView(Context context) {
((WindowManager) context.getSystemService(Context.WINDOW_SERVICE))
.removeView(this);
}
public void newWindow(Context context) {
mWM = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
this.setOnTouchListener(this);
wmParams = new WindowManager.LayoutParams();
wmParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
| WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
wmParams.format = 1;
wmParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
| LayoutParams.FLAG_NOT_FOCUSABLE;
wmParams.width = LayoutParams.MATCH_PARENT;
wmParams.height = (int) (3*TextSize);
mWM.addView(this, wmParams);// 将本歌词控件添加到窗口
}
@Override
protected void onDraw(Canvas canvas) {
if (index == -1) {
canvas.drawText(lrcpac.title, centerX, centerY, cPaint);
return;
}
int m = index % 2;
if (shadow) {
fp = (cTime - sTime) * 1.0f / lTime;
fp = fp * 1.1f;
paint[m].setShader(new LinearGradient(centerX - len / 2, centerY,
centerX + len / 2, centerY, new int[] { cColor, ncColor },
new float[] { fp, fp }, TileMode.CLAMP));
paint[(m + 1) % 2].setShader(null);
}
int i = m == 0 ? 1 : -1;
int j = -(i - 1) >> 1;
if ((index + j) != lrcpac.getSum())
canvas.drawText(lrcpac.list.get(index + j).lrcBody, centerX,
centerY, ncPaint);
if ((index + j + i) != lrcpac.getSum())
canvas.drawText(lrcpac.list.get(index + j + i).lrcBody, centerX,
centerY + TextSize+gap, cPaint);
}
@Override
protected void OnNextLine() {
super.OnNextLine();
paint[index % 2].setColor(cColor);
paint[(index + 1) % 2].setColor(ncColor);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
float lastX = 0, lastY = 0;
int action = event.getAction();
float x = event.getX();
float y = event.getY();
if (action == MotionEvent.ACTION_DOWN) {
lastX = x;
lastY = y;
} else if (action == MotionEvent.ACTION_MOVE) {
wmParams.x += (int) (x - lastX);
wmParams.y += (int) (y - lastY);
mWM.updateViewLayout(this, wmParams);
}
return true;
}
}