`

双色球的布局实现

 
阅读更多
效果图:
[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
分享到:
评论

相关推荐

    双色球布局

    "双色球布局"是一个特定的布局模式,它可能被用于彩票类应用或者数据分析展示,目的是使双色球数据排列得整齐、有序,同时也便于用户理解和操作。在本案例中,采用了GRID布局,这是一种现代且灵活的布局方式,适用于...

    php双色球实现

    7. **响应式设计**:由于提到适用于网页和移动设计,所以程序需要具备响应式布局,能适应不同设备的屏幕尺寸,这通常通过CSS的媒体查询实现。 8. **性能优化**:对于大型抽奖活动,确保抽奖过程的高效性是必要的。...

    安卓双色球滚动效果

    总的来说,实现“安卓双色球滚动效果”需要掌握Android自定义View的绘制、动画以及事件处理等核心技能。这不仅能够提高开发者对Android系统底层机制的理解,还能为应用增添更多互动元素,提升用户体验。在实际开发中...

    jQuery+CSS3实现的双色球开奖扭蛋机抽奖特效源码.zip

    源码的具体实现可能包含以下组件: 1. **HTML结构**:HTML文件将包含抽奖界面的布局,包括按钮、球体容器和其他视觉元素。 2. **CSS样式**:CSS文件将定义界面的外观,包括球体的样式、动画效果以及界面的整体设计...

    VB编译 双色球随机软件

    通过这款双色球随机软件,初学者可以学习到VB的基本语法、控件使用和事件驱动编程的概念,而对有经验的开发者来说,这也是一个快速实现特定功能的好例子。同时,了解如何使用随机数生成器和GUI设计,对其他类型的...

    双色球HTML5游戏源码

    【双色球HTML5游戏源码】是一种基于Web技术实现的互动游戏,主要利用了HTML5的特性来创建一个模拟真实双色球彩票玩法的在线平台。HTML5是超文本标记语言HTML的第五个版本,它引入了许多新的功能和改进,使得在网页上...

    Android-Android仿网易彩票机选双色球

    - 使用Android Studio的布局工具,如XML布局文件,设计出直观、友好的用户界面。包括按钮、文本框、提示信息等元素,以展示双色球的选择过程。 - 考虑到无障碍性,需遵循Android的设计指南,确保应用对所有用户都...

    C#双色球小程序

    在实现双色球小程序时,开发者可能会使用以下C#特性和技术: - **Random类**:用于生成随机数,模拟双色球号码的选取。C#中的`Random`类提供了多种方法来生成不同范围内的随机整数。 - **事件和委托**:为了在多...

    用javascript写的一个随机产生双色球号码

    在JavaScript中实现这个功能,主要涉及以下几个知识点: 1. **数组操作**:首先,我们需要创建一个包含1到33的红色球数组,然后通过随机选取和删除元素的方式确保生成的六个数字不重复。这涉及到`Array.prototype....

    jQuery双色球开奖扭蛋机抽奖代码.zip

    这些样式决定了页面的整体布局和视觉效果。 此外,`images`文件夹包含的图片资源可能用于装饰抽奖界面,如扭蛋机的背景图、奖品图标等,增强视觉吸引力。 最后,`js`文件夹中的脚本文件(如`script.js`)是整个...

    双色球终结者

    在这款双色球软件中,C#被用来编写程序的核心逻辑,包括数据处理、算法实现以及用户界面交互。 Winform是.NET框架中的一个组件,用于创建桌面应用的用户界面。在“双色球终结者”中,Winform为用户提供了一个直观、...

    软件程序双色球选号程序

    双色球选号程序的实现通常涉及编程语言如Python、Java、C#等,开发者可能运用了随机数生成算法、数据统计分析方法以及图形用户界面(GUI)设计技术。对于用户而言,理解这些技术细节并不重要,关键在于如何利用这个...

    双色球摇奖小工具源码

    总的来说,"双色球摇奖小工具源码"是一个结合了C#基础语法、随机数生成、数据结构(HashSet)、Windows Forms UI设计以及动画效果实现的综合案例。通过分析和实践这个项目,开发者可以深入理解C#编程,并锻炼其解决...

    获取双色球开奖信息加随机摇奖

    该软件应具备清晰、直观的布局,让用户能够轻松查看历史开奖记录,同时提供一个简单易用的界面来生成随机号码。这可能需要用到GUI(图形用户界面)库,如Windows上的WinForms或WPF,或者是跨平台的Qt或Tkinter。界面...

    H5小游戏源码 双色球.zip

    7. **响应式设计**:考虑到不同设备的屏幕尺寸,源码可能采用了媒体查询和流式布局,以确保游戏在不同设备上都能良好显示。 通过深入研究这个H5小游戏源码,开发者不仅可以学习到游戏开发的基本流程,还可以掌握...

    基于python+Django的彩票双色球系统 .zip

    在本彩票系统中,Django框架提供了模型(Model)来管理数据库结构,视图(View)处理用户请求并返回响应,模板(Template)则负责页面的布局和显示。 3. 源码分析: - 模型(Models.py):在这里,开发者定义了...

    MFC双色球摇奖

    开发者需要考虑如何布局这些控件,以及它们的颜色、字体等视觉效果,以提供良好的用户体验。 6. **结果展示**:摇出的号码需要在界面上清晰地呈现给用户。这可能通过文本框或者列表视图实现,每个号码对应一行,...

    双色球彩票游戏系统 书源码 开发巨匠——Visual C++ 6.0 项目开发深度剖析 王维玉 编著

    4. 用户界面设计,包括控件布局、事件处理等。 5. 错误处理和异常安全编程。 六、项目开发深度剖析 作者王维玉深入剖析了开发过程中可能遇到的问题和解决策略,如性能优化、内存管理、多线程编程等,帮助读者提高...

    e语言-易语言获取双色球数据

    易语言支持窗口程序的开发,提供控件布局、事件处理等功能,可以创建各种交互式的界面。 6. **定时任务**:为了实时获取新的双色球数据,程序可能包含定时器组件,每隔一段时间自动更新数据。易语言的定时器事件...

    jQuery双色球随机选号器.zip

    【jQuery双色球随机选号器】是一款基于jQuery编写的代码示例,它为用户提供了一个功能完善的双色球彩票号码生成器。这个项目的核心在于利用jQuery的灵活性和强大的DOM操作能力,来实现号码的随机选取和展示效果。...

Global site tag (gtag.js) - Google Analytics