双色球的布局实现

本文详细介绍了如何使用Java实现双色球彩票系统的各个组件,包括效果图展示、工程结构图解析、MainActivity类实现以及LotteryView类设计。系统包含多个选区、不同玩法的实现逻辑,并提供了用户交互界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图:
[img]
[img]http://dl.iteye.com/upload/attachment/0064/8430/9417faa4-4952-3b4c-8b71-722e02f53a48.jpg[/img]
[/img]

工程结构图:
[img]
[img]http://dl.iteye.com/upload/attachment/0064/8432/77a7b7d9-3210-3b0e-84cf-dcd80e3abd29.jpg[/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);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值