`

双色球的布局实现

 
阅读更多
效果图:
[img]

[/img]

工程结构图:
[img]

[/img]

MainActivity:
package com.zzl.shuangseqiu;

import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;

public class MainActivity extends Activity implements LotteryComMethod, OnClickListener {
	/**
	 * n 代表有几个选区,比如双色球,有红蓝两个选区,暂时未用到 s1代表第一个选区有几个数字, s2代表第二个选区有几个数字,
	 * m1代表第一个选区至少选几个 m2代表第二个选区至少选几个 redlist用于存储选区1的球 bluelist用于存储选区2的球
	 * type表示了玩法,单注,复试,胆拖
	 */
	private int n = 2;
	private LotteryBox[] lb;
	private LinearLayout ball;
	private int[] s = { 33, 16 }, m = { 6, 1 }, maxBall;
	private ArrayList<ArrayList<LotteryView>> ballList = new ArrayList<ArrayList<LotteryView>>();
	private String[] name = {"1","2","3","4","5","6","7","8","9","10"};
	boolean startZero = true;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		ball = (LinearLayout) findViewById(R.id.ball);
		addBall();
	}

	/**
	 * 添加球
	 */
	public void addBall() {
		lb = new LotteryBox[n];
		for (int i = 0; i < n; i++) {
			lb[i] = new LotteryBox(this, null, "选择" + name[i]);

			lb[i].setPadding(10, 0, 0, 0);

			for (int j = 0; j < (startZero ? (s[i] + 1) : s[i]); j++) {

				LotteryView lv = new LotteryView(this, this, null,
						startZero ? j : j + 1, m[i]);
				lb[i].addBall(lv);
			}
			ball.addView(lb[i]);
		}
	}

	@Override
	public boolean check(LotteryView lv, boolean is) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public int checkMulti() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void clear() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public int getDanTuoTotal() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getFuShiTotal() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getType() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void refesh() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void setType(int type) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void onClick(View arg0) {
		// TODO Auto-generated method stub
		
	}

}


LotteryView:
/**
 * 彩票球类
 */
package com.zzl.shuangseqiu;

import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;

public class LotteryView extends Button {
	/**
	 * checked,unchecked,checned_dan分别为未选中,选中,胆拖状态
	 * single,fu_shi,dan_tuo分别为单注,复式,胆拖玩法
	 * status记录了该球的状态
	 * num记录了该球的号码
	 */
	public final static int CHECKED = 0, UNCHECKED = 1, CHECKED_DAN = 2;
	public final static int SINGLE = 3, FU_SHI = 4, DAN_TUO = 5;
	private int status = UNCHECKED;
	private int num = -1;
	private boolean isdan = true;

	public boolean isIsdan() {
		return isdan;
	}

	public void setIsdan(boolean isdan) {
		this.isdan = isdan;
	}

	public LotteryView(final Context c,final LotteryComMethod context, AttributeSet attrs,
			int num,int max) {
		super(c, attrs);
		setBackgroundResource(R.drawable.white_ball);
		this.setNum(num);
		setPadding(0, 0, 0, 0);
		setText(String.valueOf(num));
		setWidth(BitmapFactory.decodeResource(getResources(), R.drawable.white_ball).getWidth());
		setHeight(BitmapFactory.decodeResource(getResources(), R.drawable.white_ball).getHeight());
		setOnClickListener(new OnClickListener() {
			/**
			 * 当球被点击时,监听状态,根据球当前的状态进行变化 未选中->选中 ->胆拖
			 * 并更新玩法状态
			 * 若第一次进入新状态,进行提示
			 */
			public void onClick(View v) {
				if (status == CHECKED) {
							status = CHECKED_DAN;
							setBackgroundResource(R.drawable.twice_click);
				} else if (status == UNCHECKED && isdan) {
					status = CHECKED;
					setBackgroundResource(R.drawable.once_click);
				} else if(status == UNCHECKED && !isdan){
					status = CHECKED_DAN;
					setBackgroundResource(R.drawable.twice_click);
				}else if (status == CHECKED_DAN) {
						status = UNCHECKED;
						setBackgroundResource(R.drawable.white_ball);
				}
				int ty=context.checkMulti();
				context.check((LotteryView) v,true);
				 context.setType(ty);
				 context.refesh();
			}
		});
	}

	public void setStatus(int status) {
		if(status == UNCHECKED){
			setBackgroundResource(R.drawable.white_ball);
		}else if(status == CHECKED){
			setBackgroundResource(R.drawable.once_click);
		}else if(status == CHECKED_DAN){
			setBackgroundResource(R.drawable.twice_click);
		}
		this.status = status;
	}

	public int getStatus() {
		return status;
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
	}

	public void setNum(int num) {
		this.num = num;
	}

	public int getNum() {
		return num;
	}

	public void reSet(){
		status = UNCHECKED;
		setBackgroundResource(R.drawable.white_ball);
	}

	public void reSetFu() {
		status = CHECKED;
		setBackgroundResource(R.drawable.blue_ball);
	}
}


LotteryGbox:
package com.zzl.shuangseqiu;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;

public class LotteryGbox extends LinearLayout {
	private LinearLayout ll;
	private Context c;

	public LotteryGbox(Context context, AttributeSet attrs) {
		super(context, attrs);
		c = context;
		setOrientation(LinearLayout.VERTICAL);
	}

	@Override
	public void addView(View child) {
		if (ll == null) {
			ll = new LinearLayout(c);
			ll.setBackgroundResource(R.drawable.ball_under); 
			ll.setOrientation(LinearLayout.HORIZONTAL);
			ll.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
			ll.addView(child);
			super.addView(ll);
			
		} else {
			if (ll.getChildCount() == 10) {
				ll = new LinearLayout(c);
				ll.setBackgroundResource(R.drawable.ball_under);
				ll.setOrientation(LinearLayout.HORIZONTAL);
				ll.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
				ll.addView(child);
				super.addView(ll);
			} else {
				ll.addView(child);
			}
		}
	}

}


LotteryComMethod:
/**
 * 
 * 该接口实现了每个需要用到lotteryView需要调用的方法,这些方法会在lotteryView中进行回调
 * 
 */

package com.zzl.shuangseqiu;

public interface LotteryComMethod {
	void setType(int type);
	int getType();
	int getFuShiTotal();
	int getDanTuoTotal();
	boolean check(LotteryView lv,boolean is);
	void clear();
	void refesh();
	int checkMulti();
}


LotteryBox:
package com.zzl.shuangseqiu;


import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.widget.LinearLayout;
import android.widget.TextView;

public class LotteryBox extends LinearLayout {
	private TextView title;
	private LotteryGbox content;
	public LotteryBox(Context context, AttributeSet attrs,String title) {
		super(context, attrs);
		this.title=new TextView(context);
		this.title.setText(title);
		this.title.setTextColor(Color.BLACK);
		this.title.setPadding(10, 0, 10, 0);
		content=new LotteryGbox(context, attrs);
		content.setBackgroundColor(0xffffff);

		addView(this.title);
		addView(content);
		setOrientation(LinearLayout.VERTICAL);
	}
	public void addBall(LotteryView lv){
		content.addView(lv);
	}
}
  • 大小: 43.4 KB
  • 大小: 31.8 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics