您的位置:首页 > 移动开发 > Android开发

如何动态生成Selector状态选择器

2017-01-23 14:07 127 查看
前几天在项目有优化的时候,突然想动态生成selector  所以就写了一个工具类  

/**
* 动态设置 点击事件 selector 的工具类  可以从本地添加  也可以从网络添加
* Created by suwenlai on 16-12-26.
*/

public class SelectorUtil {

/**
* 从 drawable 获取图片 id 给 Imageview 添加 selector
*  @param context 调用方法的 Activity
* @param idNormal 默认图片的 id
* @param idPress  点击图片的 id
* @param iv   点击的 view
*/
public static void addSelectorFromDrawable(Context context , int idNormal, int idPress,ImageView iv){

StateListDrawable drawable = new StateListDrawable();
Drawable normal = context.getResources().getDrawable(idNormal);
Drawable press = context.getResources().getDrawable(idPress);
drawable.addState(new int[]{android.R.attr.state_pressed},press);
drawable.addState(new int[]{-android.R.attr.state_pressed},normal);
iv.setBackgroundDrawable(drawable);
}

/**
* 从 drawable 获取图片 id 给 Button 添加 selector
* @param context 调用方法的 Activity
* @param idNormal 默认图片的 id
* @param idPress  点击图片的 id
* @param button   点击的 view
*/

public static void addSelectorFromDrawable(Context context , int idNormal, int idPress,Button button){

StateListDrawable drawable = new StateListDrawable();
Drawable normal = context.getResources().getDrawable(idNormal);
Drawable press = context.getResources().getDrawable(idPress);
drawable.addState(new int[]{android.R.attr.state_pressed},press);
drawable.addState(new int[]{-android.R.attr.state_pressed},normal);
button.setBackgroundDrawable(drawable);
}

/**
* 从网络获取图片 给 ImageView 设置 selector
*  @param clazz 调用方法的类
* @param normalUrl 获取默认图片的链接
* @param pressUrl 获取点击图片的链接
* @param imageView 点击的 view
*/
public static void addSeletorFromNet(final Class clazz, final String normalUrl, final String pressUrl, final ImageView imageView){
new AsyncTask<Void,Void,Drawable>(){

@Override
protected Drawable doInBackground(Void... params) {
StateListDrawable drawable = new StateListDrawable();
Drawable normal = loadImageFromNet(clazz,normalUrl);
Drawable press = loadImageFromNet(clazz, pressUrl);
drawable.addState(new int[]{android.R.attr.state_pressed},press);
drawable.addState(new int[]{-android.R.attr.state_pressed},normal);
return drawable;
}

@Override
protected void onPostExecute(Drawable drawable) {
super.onPostExecute(drawable);
imageView.setBackgroundDrawable(drawable);
}
}.execute();

}

/**
*
* 从网络获取图片 给 Button 设置 selector
* @param clazz 调用方法的类
* @param normalUrl 获取默认图片的链接
* @param pressUrl 获取点击图片的链接
* @param button 点击的 view
*/
public static void addSeletorFromNet(final Class clazz, final String normalUrl, final String pressUrl, final Button button){
new AsyncTask<Void,Void,Drawable>(){

@Override
protected Drawable doInBackground(Void... params) {
StateListDrawable drawable = new StateListDrawable();
Drawable normal = loadImageFromNet(clazz,normalUrl);
Drawable press = loadImageFromNet(clazz, pressUrl);
drawable.addState(new int[]{android.R.attr.state_pressed},press);
drawable.addState(new int[]{-android.R.attr.state_pressed},normal);
return drawable;
}

@Override
protected void onPostExecute(Drawable drawable) {
super.onPostExecute(drawable);
button.setBackgroundDrawable(drawable);
}
}.execute();

}

/**
* 从网络获取图片
* @param clazz 调用方法的类
* @param netUrl 获取图片的链接
* @return  返回一个 drawable 类型的图片
*/
private static Drawable loadImageFromNet(Class clazz, String netUrl) {
Drawable drawable =null;
try {
drawable = Drawable.createFromStream(new URL(netUrl).openStream(), "netUrl.jpg");
} catch (IOException e) {
MyLog.e(clazz.getName(),e.getMessage());
}

return drawable;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息