package zhch.illq;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.PixelFormat;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;
public class PingBanBoard extends Activity {
/** Called when the activity is first created. */
Map<Integer, MyButton> buttons = new HashMap<Integer, MyButton>();
private Map<Integer, List<Integer>> relation = new HashMap<Integer, List<Integer>>();
// 图片分的除数
private int colNum = 4;
// 当前空白按钮
private int currentBlank = colNum * colNum - 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout mainPanel = (LinearLayout) findViewById(R.id.mainPanel);
// 创建放图片的按钮
for (int i = 0; i < colNum; i++) {
LinearLayout subLayout = new LinearLayout(this);
mainPanel.addView(subLayout);
for (int j = 0; j < colNum; j++) {
MyButton button = new MyButton(this);
buttons.put(i * colNum + j, button);
subLayout.addView(button);
}
}
Drawable mm = getResources().getDrawable(R.drawable.mm);
buttons.get(1).setBackgroundDrawable(cuteImage(mm, colNum, 1, 1));
// 设置图片
for (int i = 0; i < (colNum * colNum); i++) {
buttons.get(i).setBackgroundDrawable(cuteImage(mm, colNum, i % colNum, i / colNum));
android.util.Log.v("number 1", "" + i / colNum + "===" + i % colNum);
}
// 设置按钮监听器
for (int i = 0; i < (colNum * colNum); i++) {
MyButton button = (MyButton) buttons.get(i);
button.position = i;
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MyButton view = (MyButton) v;
if (moveable(colNum, view.position, currentBlank)) {
android.util.Log.v("currentBlank", "" + currentBlank);
MyButton blankView = (MyButton) buttons.get(currentBlank);
Drawable temp = blankView.getBackground();
blankView.setBackgroundDrawable(view.getBackground());
view.setBackgroundDrawable(temp);
currentBlank = view.position;
android.util.Log.v("currentBlank ", "" + currentBlank);
}
}
});
}
}
/**
* 取正方形图片的一部分
*
* @param drawable
* 图片
* @param count
* 总行数
* @param row
* 行
* @param col
* 列
* @return
*/
public final BitmapDrawable cuteImage(Drawable drawable, int count, int row, int col) {
int sideLength = drawable.getIntrinsicWidth(); // 取drawable的边长
// 取小块的边长
int subLength = sideLength / count;
Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565; // 取drawable的颜色格式
Bitmap bitmap = Bitmap.createBitmap(sideLength, sideLength, config); // 建立对应bitmap
Canvas canvas = new Canvas(bitmap); // 建立对应subBitmap的画布
canvas.clipRect(0, 0, sideLength, sideLength);
drawable.setBounds(0, 0, sideLength, sideLength);
if ((row + 1) * (col + 1) != count * count) {
drawable.draw(canvas); // 把drawable内容画到画布中
}
Bitmap subBitmap = Bitmap.createBitmap(bitmap, row * subLength, col * subLength, subLength, subLength);// 取图的一部分
return new BitmapDrawable(subBitmap);
}
/**
* 判断当前位置是否可以移动
*
* @param colNum
* 分割的阶数
* @param position
* 点击的位置
* @param current
* 当前空白位置
* @return 是否能移动
*/
private boolean moveable(int colNum, int position, int current) {
android.util.Log.v("Math.abs(position - current) ", "" + Math.abs(position - current));
android.util.Log.v("Math.max(position, current) ", "" + Math.max(position, current));
if (Math.abs(position - current) == colNum) {
return true;
}
if ((Math.abs(position - current) == 1) && (Math.max(position, current) % colNum != 0)) {
return true;
}
return false;
}
}
分享到:
相关推荐
【5.4-拼板问题】是一个典型的组合优化问题,源于一种常见的智力玩具。这个问题涉及到在8x8的正方形底板上用8块不同形状、颜色的小拼板进行拼接,目标是使得所有小拼板完全覆盖底板,且每块拼板的两面颜色相同,由8...
"行业分类-设备装置-拼板的自动化共用测试平台结构"这一主题聚焦于如何构建一个高效的自动化测试系统,以服务于拼板设备的检测需求。这个压缩包中的"拼板的自动化共用测试平台结构.pdf"文件很可能是详细阐述这一概念...
【电信设备-拼板移动式脱排油烟机】 在IT行业中,电信设备是通信网络的基础,涵盖各种硬件和软件系统,用于传输、交换和处理数据。拼板移动式脱排油烟机,虽然名称中带有“电信设备”,但实际上,它更倾向于工业...
然后,需要在Y轴方向上设置一个焊盘,以便电路板生产工艺中的加工和焊接工厂的加工。焊盘的位置需要在Y轴板边的高度加0.127MM处。 mark点设置 mark点是PCB电路板生产工艺中的一个重要组成部分,用于锡膏印刷和元件...
拼板的主要目的是解决单个PCB尺寸不符合加工规定的问题,通过将多个小板组合成一个大的整体板来达到合适尺寸,以便于高效地进行贴片和焊接。 首先,我们需要理解为什么要进行PCB拼板。当电路板的尺寸过小,可能无法...
- 完成第一个PCB的放置后,继续放置其余的PCB,直到所有需要拼接的PCB都放置完毕。 ##### 步骤5:添加板边 - 在完成所有PCB的放置后,可以根据需要添加板边。 - 板边通常需要留有足够的空间以方便后续加工,一般...
实木拼板-工艺标准.pdf
拼板机的发展可以追溯到第一次世界大战期间,当时液压传动和气动传输技术开始发展,并奠定了拼板机的基础。经过近一个世纪的发展,液压传动技术已经相当成熟,为拼板机的发展奠定了坚实的基础。 2. 拼板机的工作...
CAM350拼板的第一步是打开CAM350软件并导入 GERBER 文件。GERBER 文件是PCB设计和制造过程中的一种常见文件格式,用于描述PCB的设计和制造信息。在CAM350中导入GERBER文件后,可以进行拼板操作。 二、 改变坐标...
总的来说,"简易矩形拼板"是一个涉及几何、算法和编程技术的综合性问题。通过理解和实践,我们可以提升在图形处理和计算方面的技能,同时也能锻炼解决问题和逻辑思考的能力。对于初学者来说,这是一个很好的学习项目...
第一个知识点:Allegro PCB拼板的目的 Allegro PCB拼板的主要目的是将多个PCB板子组合成一个PCB板子,以便减少制板费用和提高设计效率。这可以帮助设计师更好地管理PCB设计项目,并提高设计质量。 第二个知识点:...
1、PCB拼板的外框(夹持边)应采用闭环设计,确保PCB拼板固定在夹具上以后不会变形; 2、PCB拼板宽度≤260mm(SIEMENS线)或≤300mm(FUJI线);如果需要自动点胶,PCB拼板宽度×长度≤125 mm×180 mm; 3、PCB...
- **定义**:拼板是指将多个较小的PCB板组合成一个较大的单元,以提高生产效率和降低制造成本。 - **尺寸要求**: - 当单个PCB板的尺寸小于50mm×50mm时,推荐进行拼板处理。 - 当单个PCB板的尺寸大于80mm×80mm时...
1. 提高生产效率:Allegro PCB 拼板可以将多个 PCB 板拼接成一个大的PCB板,从而提高生产效率和降低成本。 2. 降低成本:Allegro PCB 拼板可以减少 PCB 板的尺寸,提高PCB板的密度和可靠性,从而降低成本。 3. ...
CAM350 是一种常用的 PCB 设计软件,拼板步骤是 CAM350 中的一项重要功能,本文将详细讲解 CAM350 拼板步骤的每个步骤,并提供相关的知识点。 一、打开 CAM350 软件并导入 GERBER 文件 在 CAM350 中,首先需要打开...
拼板是将多个单独的电路板布局在一个大板上,以便于制造和组装,尤其适用于批量生产。 在PCB设计中,拼板有多种样式和技巧,如: 1. 各种形状板子拼板:这涉及到将不同形状的PCB布局组合在一起,如矩形、圆形或不...
SMT拼板是将多个独立的PCB小板通过特定的设计方式组合成一个大板,这样可以在同一时间进行批量贴装,提高生产速度,降低单个板的贴装成本。同时,拼板还能减少设备的调整时间和材料浪费,提高整体生产效率。 2. **...
圆板拼板是一种特殊的PCB拼板方式,尤其适用于制作圆形或不规则形状的电路板。本教程将详细介绍圆板拼板的概念、应用场景及嘉立创公司的拼板服务,并结合“圆板拼板图”进行详细解析。 首先,圆板拼板主要是为了...
用户可以通过运行这个程序来安装系统,实现自动化流程。在安装过程中,用户可能需要提供一些必要的信息,如安装路径、许可证密钥等,并遵循屏幕提示完成设置。安装完成后,系统将集成到生产流程中,通过与生产设备的...