218.m1多种颜色显示排行

本文介绍了一种基于Java的排行榜数据解析方法,利用JSON数据填充UI组件,并通过随机颜色设置背景来增强视觉效果。此外,还实现了按钮状态选择器以响应用户交互。

排行是根据json中解析的数据,进行按照一定的顺序显示,解析的数据以某种颜色作为北京进行显示。

json数据

解析json数据

package com.ldw.market.protocol;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;

/*
 * 解析排行数据
 */
public class TopProtocol extends BaseProtocol<List<String>> {

	@Override
	public List<String> parseJson(String json) {
		List<String> datas=new ArrayList<String>();
		try {
			JSONArray array=new JSONArray(json);
			for(int i=0;i<array.length();i++){
				String str=array.getString(i);
				datas.add(str);
			}
			return datas;
		} catch (JSONException e) {
			e.printStackTrace();
			return null;
		}		
	}

	@Override
	public String getKey() {
		return "hot";
	}

}

DrawableUtils.java用于实现圆角矩形和代码实现状态选择器

package com.ldw.market.utils;

import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.StateListDrawable;

/*
 * 实现圆角矩形
 */
public class DrawableUtils {
	//创建一个shape资源
	public static GradientDrawable createShape(int color){
		GradientDrawable drawable=new GradientDrawable();
		//设置4个角的弧度 
		drawable.setCornerRadius(UiUtils.dip2px(5));
		// 设置颜色
		drawable.setColor(color);
		return drawable;
		
		
	}
	
	//按钮点击的状态选择器
	public static StateListDrawable createSelectorDrawable(Drawable pressedDrawable,Drawable normalDrawable){
//		<selector xmlns:android="http://schemas.android.com/apk/res/android"  android:enterFadeDuration="200">
//	    <item  android:state_pressed="true" android:drawable="@drawable/detail_btn_pressed"></item>
//	    <item  android:drawable="@drawable/detail_btn_normal"></item>
//	</selector>
		//状态列表
		StateListDrawable stateListDrawable=new StateListDrawable();
		//添加状态
		stateListDrawable.addState(new int[]{android.R.attr.state_pressed}, pressedDrawable);// 按下显示的图片
		stateListDrawable.addState(new int[]{}, normalDrawable);// 抬起显示的图片,什么都不做的时候数组里面可以不写内容
		return stateListDrawable;
		
	}
}

TopFragment.java内容的显示,颜色采用随机色的形式设置背景

package com.ldw.market.fragment;

import java.util.List;
import java.util.Random;

import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.StateListDrawable;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;

import com.ldw.market.R;
import com.ldw.market.protocol.TopProtocol;
import com.ldw.market.utils.DrawableUtils;
import com.ldw.market.utils.UiUtils;
import com.ldw.market.view.LoadingPage.LoadResult;

public class TopFragment extends BaseFragment1 {

	private List<String> datas;
	
	@Override
	public View createSuccessView() {
		ScrollView scrollView=new ScrollView(UiUtils.getContext());
		scrollView.setBackgroundResource(R.drawable.grid_item_bg_normal);
		LinearLayout layout=new LinearLayout(UiUtils.getContext());
		int padding=UiUtils.dip2px(13);
		layout.setOrientation(LinearLayout.VERTICAL);
		layout.setPadding(padding, padding, padding, padding);
		//创建一个shape资源,设置默认颜色
		int backColor = 0xffcecece;
		Drawable pressedDrawable=DrawableUtils.createShape(backColor);// 按下显示的图片
		for(int i=0;i<datas.size();i++){
			TextView textView=new TextView(UiUtils.getContext());
			final String str=datas.get(i);
			textView.setText(str);//设置文本
			
			//创建随机数
			Random random = new Random();
			int red = random.nextInt(200) + 20;//范围在20-220之间,防止黑色或者白色
			int green = random.nextInt(200) + 20;
			int blue = random.nextInt(200) + 20;
			int color =Color.rgb(red, green, blue);	
			//循环中设置不同的资源
			Drawable createShape=DrawableUtils.createShape(color);
			//添加状态选择器,设置背景图片
			StateListDrawable createSelectorDrawable = DrawableUtils.createSelectorDrawable(pressedDrawable, createShape);// 创建状态选择器
			textView.setBackgroundDrawable(createSelectorDrawable);
			textView.setTextColor(Color.WHITE);
			textView.setTextSize(UiUtils.dip2px(14));//字体大小
			int textPaddingV = UiUtils.dip2px(4);
			int textPaddingH = UiUtils.dip2px(7);
			textView.setPadding(textPaddingH, textPaddingV, textPaddingH, textPaddingV); //设置padding 
			textView.setClickable(true);//设置textView可以被点击
			textView.setOnClickListener(new OnClickListener() {  // 设置点击事件
				
				@Override
				public void onClick(View v) {
					Toast.makeText(UiUtils.getContext(), str, 0).show();
				}
			});
			
			layout.addView(textView,new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, -2));// -2 包裹内容
		}
		
		scrollView.addView(layout);
		return scrollView;
	}

	@Override
	protected LoadResult load() {
		TopProtocol protocol=new TopProtocol();
		datas = protocol.load(0);
		return checkData(datas);
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值