今天是考试完的第一天,说是考试,然而简直就是走走形式。嗨,
回来之后网上找了一个ApkBus上找了一个源代码,看了看勉强能明白写的啥,就是通过一个进度条,控制某个颜色变化。
也不知到有什么用 先写下来,看看保留起来吧。
这个代码 不能先看xml文件了,我们先看看SeekBarcolorPicker这类,
这个类继承了 SeeBar 并且实现了SeekBar.OnSeekBarChangeListener这个接口。
继承完后,有一个内部定义的方法SeekBarColorPicker,都重写,方法里面都初始化一下进度条的最大值。
然写一个自定义的监听OnColorChangedListe
看看代码把
package com.example.he_jingzhou.seekbarcolordemo;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.SeekBar;
/**
* Created by He_jingzhou on 2016/1/4.
*/
public class SeekBarColorPicker extends SeekBar implements SeekBar.OnSeekBarChangeListener {
private int color;
private OnColorChangedListener listener;
public interface OnColorChangedListener {
public void onProgressColorChanged(int color);
public void onStartColorChanged(int color);
public void onStopColorChanged(int color);
}
public SeekBarColorPicker(Context context) {
super(context);
init();
}
public SeekBarColorPicker(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public SeekBarColorPicker(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
setMax(256 * 6 - 1);
setOnSeekBarChangeListener(this);//拖动条的监听 包括启动停止
}
/**
* onSizeChanged 这个方法是在 view改变大小是进行调用
*
* @param w 新的宽度
* @param h 新的高度
* @param oldw old宽度
* @param oldh old高度
*/
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
}
public void setOnSeebarColorChangedListener(OnColorChangedListener listener) {
this.listener = listener;
}
/**
* 获取当前的颜色
*
* @return 当前颜色
*/
public int getCurrentColor() {
return color;
}
/**
* onProgressChanged 进度条发生变化
*
* @param seekBar 这个滑动条的进步改变了
* @param progress 当前的进度水平 从0开始的 最大 call setMax(int x).默认100
* @param fromUser 如果用户发起的进度更改是正确的。
*/
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) //如果user发出的操作是正确的那么 就将进度颜色改变成当前颜色
{
color = changeColor(progress);
if(listener != null)
{
listener.onProgressColorChanged(color);
}
}
}
/**
* onStartTrackingTouch 通知用户开始触摸手势了 用户可以使用该禁用进度条的推进
*
* @param seekBar seekBar的触摸手势开始
*/
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
color = changeColor(seekBar.getProgress());
if(listener != null)
{
listener.onStartColorChanged(color);
}
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
color = changeColor(seekBar.getProgress());
if(listener != null)
{
listener.onStopColorChanged(color);
}
}
/**
* 创建进度条
* @param width
* @param height
*/
private void createSeekBar(int width, int height)
{
//无颜色 蓝 绿 青色 橙色 品红 黄色 纯白
int[] mcolor = new int[] {0xFF000000,0xFF0000FF,0xFF00FF00,0xFF00FFFF,0xFF00FFFF,0xFFFF00FF,0xFFFF00FF,0xFFFFFF00,0xFFFFFFFF};
/**public GradientDrawable (GradientDrawable.Orientation orientation, int[] colors)
GradientDrawable 创建新的渐变可绘制给定一个方向和一个渐变的颜色的数组。
参数1:
GradientDrawable.Orientation BL_TR draw the gradient from the bottom-left to the top-right 绘制渐变从左下到右上角
GradientDrawable.Orientation BOTTOM_TOP draw the gradient from the bottom to the top绘制渐变从底部到顶部
GradientDrawable.Orientation BR_TL draw the gradient from the bottom-right to the top-left绘制渐变从右到左上方
GradientDrawable.Orientation LEFT_RIGHT draw the gradient from the left to the right绘制渐变从左到右
GradientDrawable.Orientation RIGHT_LEFT draw the gradient from the right to the left绘制渐变从右向左
GradientDrawable.Orientation TL_BR draw the gradient from the top-left to the bottom-right绘制渐变从左到右下角
GradientDrawable.Orientation TOP_BOTTOM draw the gradient from the top to the bottom从上到下的渐变绘制
GradientDrawable.Orientation TR_BL draw the gradient from the top-right to the bottom-left绘制渐变从右上方到左下方
参数2: 为颜色数组
*/
GradientDrawable m = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,mcolor);
m.setGradientType(GradientDrawable.LINEAR_GRADIENT);//设置渐变类型
m.setCornerRadius(15); //指定矩形的角半径。
this.setProgressDrawable(m);
}
private int changeColor(int progress) {
int r = 0;
int g = 0;
int b = 0;
Log.i("progress", "progress " + progress);
if (progress < 256) {
r = 255;
g = progress % 256;
} else if (progress < 256 * 2) {
g = 256;
r = 256 - progress % 256;
} else if (progress < 256 * 3) {
r = 0;
g = 255;
b = progress % 256;
} else if (progress < 256 * 4) {
b = 255;
g = 256 - progress % 256;
} else if (progress < 256 * 5) {
b = 255;
r = progress % 256;
} else if (progress < 256 * 6) {
r = 255;
b = 256 - progress % 256;
}
return Color.argb(255,r,g,b);
}
}
package com.example.he_jingzhou.seekbarcolordemo;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
public class MainActivity extends AppCompatActivity {
SeekBar seekBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SeekBarColorPicker seekBarColorPicker = (SeekBarColorPicker)findViewById(R.id.SeekbarColorPicker);
final RelativeLayout relativeLayout = (RelativeLayout)findViewById(R.id.RelativeLayout);
seekBarColorPicker.setOnSeebarColorChangedListener(new SeekBarColorPicker.OnColorChangedListener() {
@Override
public void onProgressColorChanged(int color) {
//Log.i("", " " +);
relativeLayout.setBackgroundColor(color);
}
@Override
public void onStartColorChanged(int color) {
}
@Override
public void onStopColorChanged(int color) {
}
});
setGradients(seekBarColorPicker, Color.RED);
}
/**
*GradientDrawable 创建新的渐变可绘制给定一个方向和一个渐变的颜色的数组。
* setGradients 设置 进度条的 渐变色
* @param bar
* @param color
*/
public void setGradients(SeekBar bar,int color)
{ //橙色 黄 绿 青色 蓝 品红 红
int[] mcolor= new int[]{0xFFFF0000,0xFFFFFF00,0xFF00FF00, 0xFF00FFFF, 0xFF0000FF, 0xFFFF00FF,0xFFFF0000};
GradientDrawable m = new GradientDrawable(GradientDrawable.Orientation.BL_TR,mcolor);
m.setGradientType(GradientDrawable.LINEAR_GRADIENT);
m.setCornerRadius(15);
bar.setProgressDrawable(m);
}
}
结果表现
源码:http://download.csdn.net/detail/csdnhejingzhou/9389938