桌面小部件基础篇:Android AppWidget (桌面小部件)
音乐播放 (动画实现)
一个音乐播放的柱状图(不会上传动图,自行脑补)
思路方案:
1,自定义View,widget 仅支持部分控件,自定义没用,我把自定义弄完了,才想起来。所以这个方案pass
2,帧动画,直接使用ImageView,也不行,无法获取子控件属性,帧动画运行不了
3,LayoutAnimation,这个我还没试怎么实现复杂动画,不过应该可以实现简单的 缩放,透明度,等属性动画(自己测试吧)
4,线程实现帧动画
5,handler 实现帧动画(比较好控制)
自定义View(记录,不是最终选择方案)
package cn.sh.changxing.onlineradio.view;
import android.animation.ValueAnimator;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.os.Build;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.animation.LinearInterpolator;
import android.widget.RemoteViews;
import java.util.Random;
/**
* 仿柱形频谱 动画播放
*/
public class PlayerView extends View {
private static final String TAG = "PlayerView2";
/**
* 画笔
*/
private Paint paint;
/**
* 整个控件宽,高,最终取值
*/
private int width, height, min;
/**
* 小矩形边长
*/
private float border;
/**
* 间隔
*/
private float interval;
/**
* 柱状图 X*X(默认 7*7)
*/
private int line = 7;
private ValueAnimator valueAnimator;
private int current = -1;
private int random = 0;
public PlayerView(Context context) {
this(context, null);
}
public PlayerView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public PlayerView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
/**
* 初始化
*/
private void init() {
Log.e(TAG, "init: ");
paint = new Paint();
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setColor(Color.WHITE);
initAnimation();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (width == 0 || height == 0) {
width = getMeasuredWidth();
height = getMeasuredHeight();
min = Math.min(widt