前言
最近沒什麼事情,在微信上看見看圖猜成語的遊戲,於是自己也寫了一個來玩。源碼放在了文章底部。
先來看下效果圖
Gif的畫質就將就這樣吧
我們先來分析一下
我們主要的就是這3個地方
1、就是一個imageview
2、我們用動態的方式添加多個Textview
3、下面就是4個TextView
先來看下佈局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="20dp"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<ImageView
android:id="@+id/question_img"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
<LinearLayout
android:id="@+id/liner"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical">
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="10dp"
android:layout_weight="1"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_margin="12dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="題目:" />
<TextView
android:id="@+id/one"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="10dp"
android:background="#90CDD5"
android:gravity="center" />
<TextView
android:id="@+id/two"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="10dp"
android:background="#90CDD5"
android:gravity="center" />
<TextView
android:id="@+id/three"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="10dp"
android:background="#90CDD5"
android:gravity="center" />
<TextView
android:id="@+id/four"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="10dp"
android:background="#90CDD5"
android:gravity="center" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/judge"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_margin="12dp"
android:gravity="center" />
<TextView
android:id="@+id/next"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_margin="12dp"
android:background="#00BCD4"
android:gravity="center"
android:text="答題"
android:visibility="visible" />
<TextView
android:id="@+id/number"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_margin="12dp"
android:gravity="center"
android:text="分數:0" />
</LinearLayout>
<TextView
android:id="@+id/tishi"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_margin="10dp"
android:background="#FF9800"
android:gravity="center"
android:text="提示"
android:textColor="#fff" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
第二我們就需要動態添加很多個Textview來顯示字
大概就是這個樣子 我們先要弄3個LinerLayout 出來在裏面在分別裝4個Textview具體代碼我貼在下面
private void addTextiew() {
//獲取屏幕的寬度高度
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight() - PxtoDpUntils.dp2pxInt(context, 30);
//先循環4次弄出LinearLayout
for (int i = 0; i < 4; i++) {
LinearLayout linearLayout = new LinearLayout(context);
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
//添加進去
liner.addView(linearLayout);
//設置4個LinearLyout 的高度寬度
LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) linearLayout.getLayoutParams();
linearParams.width = width;
linearParams.height = height / 16;
linearLayout.setLayoutParams(linearParams);
//再循環出每個LinerLayout 裏面的4個Textview
for (int j = 0; j < 4; j++) {
TextView textView = new TextView(context);
textView.setBackgroundColor(0xff8BCB8E);
textView.setTextSize(12);
textView.setGravity(Gravity.CENTER);
textView.setTextColor(0xffffffff);
//給每一個Textview加上tag一會方便來確認是那個Textview
textView.setTag(i + "" + j);
//把Textview添加到LinerLayout裏面去
linearLayout.addView(textView);
//再用一個 Textview的集合吧16個Textview裝起來方便使用
textViewsList.add(textView);
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) textView.getLayoutParams();
lp.width = width / 4;
lp.height = LinearLayout.LayoutParams.MATCH_PARENT;
lp.setMargins(3, 3, 3, 3);
textView.setLayoutParams(lp);
//這裏是每個textView的點擊事件
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
}
}
接下來就是把字放在每個Textview裏面去 有12個錯誤的字4個正確的字是答案
主要代碼
我先寫了一個漢字的數組
public static String textList[] = {"哈","億","個","麼",
"墨","喜","留","樣","哦","是","許","吃","測","級","發","飛","好","和 ","對","吧","不","包","你","一","兒","二","請","看"};
在上面的漢字裏面隨機抽12個字出來
int min = 0;
int max = TextListUntils.textList.length;
Random random = new Random();
for (int i = 0; i < 12; i++) {
int num = random.nextInt(max) % (max - min + 1) + min;
nowTextList.add(TextListUntils.textList[num]);
}
這個是正確的答案的集合
public static String okList[] = {"琴棋書畫","過河拆橋","畫蛇添足","傾國傾城","鶴立雞羣","手起刀落","老馬識途","臥薪嚐膽","老當益壯"};
第一關我們就應該取出正確的集合裏面的第一個例如 琴棋書畫 4個字放到上面的12個字的集合裏面去
String str = TextListUntils.okList[level_index];
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
nowTextList.add(chars[i] + "");
}
這樣就出現了16個字,但是答案的4個字使我們最後添加進去所以答案總是在最後,所以我們需要打亂這個集合
if (nowTextList.size() == 16) {
//這個方法就是打亂集合裏面的數據的方法
Collections.shuffle(nowTextList);
for (int i = 0; i < textViewsList.size(); i++) {
textViewsList.get(i).setText(nowTextList.get(i));
}
}
漢字我們已經添加完成了接下里我們要點擊每個漢字組要代碼貼下
for (int k = 0; k < questionList.size(); k++) {
if (questionList.get(k).getTag() == null) {
questionList.get(k).setTag(textView.getTag());
questionList.get(k).setText(textView.getText().toString());
break;
}
}
textView.setText("");
我把下面的4個填寫正確答案Textview 裝在了一個Textview的集合裏面 questionList ,先便利一下面的集合,下面4個我是沒有設置tag的所以判斷tag只要爲空就表示上面沒有字。然後在他上面的tag和漢字賦值給下面,這裏一定要break跳出循環並且把上面的textView賦值成“”。
這樣我們就可以把 上面的字拿到下面去了。
接下來我們要把下面的字給還到上面去,而且還的位置還要還到原來的位置上去,這裏我們開始把字點擊下來的時候把tag也給了下來,所以還回去就很簡單了只需要找對相應的tag就行了,下面是代碼
for (int i = 0; i < textViewsList.size(); i++) {
if (textView.getTag().equals(textViewsList.get(i).getTag())) {
textViewsList.get(i).setText(textView.getText().toString());
}
}
textView.setText("");
textView.setTag(null);
這樣基本我們就可以哪兒來的字我們就還回到哪兒去基本大體的功能就已經實現了,還有一個就是提示的功能我把代碼貼出來
tishi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (num == 0) {
MyToast.addToast(context, "你沒得分數 提示不了");
return;
}
if (num < level_num) {
MyToast.addToast(context, "分數不夠了");
return;
}
tishiList.clear();
olderList.clear();
if (num >= 0) {
//可以提示
//當前關卡隨便拿一個字出來提示
String str = TextListUntils.okList[level_index];
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
tishiList.add(chars[i] + "");
olderList.add(chars[i] + "");
}
//先看下面的是否有字
for (int i = questionList.size() - 1; i >= 0; i--) {
if (questionList.get(i).getTag() != null) {
tishiList.remove(i);
}
}
if (tishiList.size() == 0) {
MyToast.addToast(context, "選擇已經滿了沒有可以提示的地方了");
return;
}
int min = 0;
int max = tishiList.size();
Random random = new Random();
int nums = random.nextInt(max) % (max - min + 1) + min;
String randomText = tishiList.get(nums);
for (int i = 0; i < olderList.size(); i++) {
if (olderList.get(i).equals(randomText)) {
//先把 上面的字移除
for (int j = 0; j < nowTextList.size(); j++) {
if (nowTextList.get(j).equals(randomText)) {
textViewsList.get(j).setText("");
questionList.get(i).setText(randomText);
questionList.get(i).setTag(textViewsList.get(j).getTag());
break;
}
}
break;
}
}
num = num - level_num;
number.setText("分數:" + num);
//判斷成功
if (one.getTag() != null && two.getTag() != null && three.getTag() != null && four.getTag() != null) {
isgo = true;
success();
} else {
isgo = false;
}
} else {
//不可以提示
MyToast.addToast(context, "分數不夠了");
}
}
});
**
源碼點我
**