Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android開發筆記————簡易隨機器的制作

android開發筆記————簡易隨機器的制作

編輯:關於Android編程

這幾天無聊,於是做了個隨機器,想著以後可能會用的到。

以下是程序的運行截圖

\\

 

圖1可以通過右上角的菜單轉到圖2 的Activity 。這個程序提供了兩個功能,一個是輸入姓名後隨機出姓名。另一個是產生隨機數。

 

—————————————————————————————————————————————————————————————————————————————

好的,下面來看下怎麼做吧:

制作工具選的是Android studio.

創建工程的時候選擇Basic activity作為我們的第一個界面,因為Basic activity 提供了 右上角的菜單選項,可以來減少工程量。

 

首先把各個Activity之間連接好。先右鍵新建兩個Empty activity 。一個用來做隨機數生成器的activity 一個用來做幫助的activity。

右上角的菜單可以通過以下代碼來修改。通過onOptionsItemSelected 方法

@Override
    public boolean onOptionsItemSelected(MenuItem item) {           //右上角的菜單
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {           //這裡是簡單的隨機數生成器
            Intent toEasy = new Intent(this,Main2Activity_easy.class);
            startActivity(toEasy);
            Toast.makeText(MainActivity.this, "現在是隨機數生成模式", Toast.LENGTH_SHORT).show();
            return true;
        }else if(id == R.id.help){          //這裡是幫助的activity
            Intent toHelp= new Intent(this,Main3Activity_help.class);
            startActivity(toHelp);
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

這樣就可以通過第一個界面加載到隨機數生成界面或者幫助界面了。但是還有一個問題是如何返回。

 

這裡,我選擇用向右滑動來返回。

右劃返回,主要的方法是通過OnTouchListener接口來實現。

下面以 幫助 的代碼來示范(部分無關代碼刪除)

 

package com.example.cw.rands;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class Main3Activity_help extends AppCompatActivity  implements View.OnTouchListener{

    //手指滑動的最小速度
    private static final int X_MinSpeed = 200;

    //手指滑動最小距離
    private static final int X_MinDistance = 150;

    //手指落下時的橫坐標
    private float X_Down;

    //手指移動時的橫坐標
    private float X_Move;

    //手指拿起時的橫坐標
    private float X_away;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3_activity_help);
        
        LinearLayout ll = (LinearLayout)findViewById(R.id.help_layout);
        ll.setOnTouchListener(this);
    }

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        switch (motionEvent.getAction()){
            case MotionEvent.ACTION_DOWN:{
                X_Down=motionEvent.getX();//獲取落下點的x
                break;
            }
            case MotionEvent.ACTION_UP:
                X_away=motionEvent.getX();       //獲取移動的x
                int distanceX = (int)(X_away-X_Down);
                if(distanceX>X_MinDistance){		//如果落下點和離開點的水平距離大於阈值,就退出這個activity
                    finish();
                    return true;
                }
                break;
            default:
                break;
        }
        return true;
    }
}

上面代碼的注釋應該已經說明的很清楚了。這裡就不再累述了。

 

把 隨機數生成器 和 幫助 裡面都加上右滑返回後,我們試著運行下程序,一個基本的框架就弄好了。

下面我們開始實現程序的功能。

首先從簡單的隨機數生成器開始。

首先來到對應的layout裡修改它的布局文件。這裡我們用的線性布局。

通過多個LinearLayout 的嵌套來完成布局。

下面是隨機數生成器布局代碼




    

        

寫完布局後下面就開始把裡面的功能實現吧。

 

下面是隨機數生成器的JAVA代碼

 

package com.example.cw.rands;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import org.w3c.dom.Text;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main2Activity_easy extends AppCompatActivity  implements View.OnTouchListener{

    //手指滑動的最小速度
    private static final int X_MinSpeed = 200;

    //手指滑動最小距離
    private static final int X_MinDistance = 150;

    //手指落下時的橫坐標
    private float X_Down;

    //手指移動時的橫坐標
    private float X_Move;

    //手指拿起時的橫坐標
    private float X_away;

    //確定按鈕
    private Button inputButton;
    //隨機按鈕
    private Button randButton;
    //輸入框
    private EditText editText;
    //范圍顯示文本
    private TextView maxNumberText;
    //輸出文本
    private TextView outputText;

    String text=null;

    int maxnum=1;
    Long lll=2147483648L;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2_activity_easy);

        //實例化各個部件
        inputButton=(Button)findViewById(R.id.EasyInputButtom);
        randButton=(Button)findViewById(R.id.EasyRandButton);
        editText=(EditText)findViewById(R.id.EasyEditText);
        maxNumberText= (TextView) findViewById(R.id.EasyMaxNumber);
        outputText= (TextView) findViewById(R.id.EasyRandNumber);
        //實例化結束

        //設置確定范圍的按鈕監聽事件
        inputButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                text=editText.getText().toString();
                Pattern p = Pattern.compile("[0-9]*");
                Matcher m = p.matcher(text);
                if(text==null|text.equals("")){          //輸入為空時
                   Toast.makeText(Main2Activity_easy.this,"輸入為空!",Toast.LENGTH_SHORT).show();
                   return;
               }else if(!m.matches()){          //非法輸入
                   Toast.makeText(Main2Activity_easy.this,"請輸入小於 2147483648 且大於1的合法整數!",Toast.LENGTH_SHORT).show();
                   return;
               }
                else if(text.length()>10){   //非法輸入 大於int的范圍
                    Toast.makeText(Main2Activity_easy.this,"請輸入小於 2147483648 且大於1的合法整數!",Toast.LENGTH_SHORT).show();
                    return;
                }
                else {

                    //測試當數據為10位時的大小 用Long
                    Long test= Long.parseLong(text);
                    if(test>=lll){          //如果超過int范圍
                        Toast.makeText(Main2Activity_easy.this,"請輸入小於 2147483648 且大於1的合法整數!",Toast.LENGTH_SHORT).show();
                        return;
                    }
                    //測試結束

                    //下面開始 顯示范圍
                    editText.setText("");
                    maxnum = Integer.parseInt(text);
                    maxNumberText.setText("此時的范圍 [ 0 , "+maxnum+")");
                    //顯示成功
                }
            }
        });

        //下面開始設置隨機按鈕的監聽事件
        randButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int randNumbers = (int)(Math.random()*maxnum);
                outputText.setText("本次隨機數為: "+randNumbers);
            }
        });

        //下面是滑動屏幕返回的監聽事件
        LinearLayout ll = (LinearLayout)findViewById(R.id.Easy_layout);
        ll.setOnTouchListener(this);
    }

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        switch (motionEvent.getAction()){
            case MotionEvent.ACTION_DOWN:{
                X_Down=motionEvent.getX();//獲取落下點的x
                break;
            }
            case MotionEvent.ACTION_UP:
                X_away=motionEvent.getX();       //獲取移動的x
                int distanceX = (int)(X_away-X_Down);

                if(distanceX>X_MinDistance){

                    Toast.makeText(this,"離開隨機數生成模式",Toast.LENGTH_LONG).show();
                    finish();
                    return true;
                }
                break;
            default:
                break;
        }
        return true;
    }
}

注釋也比較清楚了。這裡為了防止輸入不符合規范,所以規定了只能輸入整數,別的是無法輸入進輸入框的。同時為了防止超出int的范圍,又對輸入的長度和大小做了判斷,加以限制。

 

 

隨機數生成器完成後,我們就開始弄我們最精華的部分了——按照名稱來隨機。

首先開始一樣,先布局,下面是布局的代碼

 



    
        


 

完成布局後開始著手為這些部件添加功能代碼了。

下面是代碼

 

package com.example.cw.rands;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity{

    //輸入框
    private EditText editText;
    //添加按鈕
    private Button addButton;
    //顯示所有姓名的文本
    private TextView nameText;
    //刪除按鈕
    private Button delButton;
    //清空按鈕
    private Button clearButton;
    //隨機按鈕
    private Button randButton;
    //隨機姓名顯示文本
    private TextView randText;

    //map裡的key值
    private int key=0;

    //輸入框的文本內容
    private String edit;

    //輸入文本框的總內容
    private String sumText;

    //名字計數器
    private int i=0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        //下面開始實例化
        //輸入框
        editText=(EditText)findViewById(R.id.mainEditText);
        //添加按鈕
        addButton=(Button) findViewById(R.id.mainInputButton);
        //顯示所有姓名的文本
         nameText=(TextView)findViewById(R.id.mainShowNameText);
        //刪除按鈕
        delButton=(Button)findViewById(R.id.mainDelOneNameButton);
        //清空按鈕
        clearButton=(Button)findViewById(R.id.mainClearAllNameButton);
        //隨機按鈕
        randButton=(Button)findViewById(R.id.mainRandButton);
        //隨機姓名顯示文本
        randText=(TextView)findViewById(R.id.mainRandText);
        //實例化結束

        //下面輸入的名字用map來存儲
        final Map map = new HashMap();

        i=0;//計數器清零

        //設置添加按鈕的監聽事件
        addButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                edit=editText.getText().toString();
                if(edit.equals("")||edit==null){        //判斷輸入是否為空
                    Toast.makeText(MainActivity.this,"輸入為空!",Toast.LENGTH_SHORT).show();
                    return;
                }
                if(sumText==null){
                    sumText=" "+edit;
                    editText.setText("");
                }else {
                    sumText=sumText+" 、"+edit;
                    editText.setText("");
                }

                map.put(i,edit);    //向map中添加有效數據
                i++;                //key值增加
                nameText.setText("此時隨機對象有: "+sumText);

            }
        });

        //刪除按鈕的監聽事件
        delButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(i>0){
                    i--;    //key值減一,根據 hashmap特性,將來添加數據會覆蓋在之前的key和value值上
                    int i=sumText.lastIndexOf(" ");
                    sumText=sumText.substring(0,i);
                    nameText.setText("此時隨機對象有: "+sumText);
                    randText.setText("");
                    return;
                }else {
                    Toast.makeText(MainActivity.this,"沒有隨機對象",Toast.LENGTH_SHORT).show();
                    randText.setText("");
                    return;
                }

            }
        });

        //清空按鈕的監聽事件
        clearButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(sumText==null){
                    Toast.makeText(MainActivity.this,"沒有隨機對象",Toast.LENGTH_SHORT).show();
                    return;
                }
                sumText=null;
                nameText.setText("此時隨機對象有: ");
                randText.setText("");
                i=0;
                map.clear();
                return;
            }
        });

        //隨機按鈕的監聽事件
        randButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(i==0){
                    Toast.makeText(MainActivity.this,"請輸入要隨機的對象名稱!",Toast.LENGTH_SHORT).show();
                    return;
                }
                int randNumbers = (int)(Math.random()*i);
                String str =map.get(randNumbers).toString();
                randText.setText("本次隨機結果為: "+str);
            }
        });

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "更多問題查看右上角幫助", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {           //右上角的菜單
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {           //這裡是簡單的隨機數生成器
            Intent toEasy = new Intent(this,Main2Activity_easy.class);
            startActivity(toEasy);
            Toast.makeText(MainActivity.this, "現在是隨機數生成模式", Toast.LENGTH_SHORT).show();
            return true;
        }else if(id == R.id.help){          //這裡是幫助的activity
            Intent toHelp= new Intent(this,Main3Activity_help.class);
            startActivity(toHelp);
            return true;
        }

        return super.onOptionsItemSelected(item);
    }


}


 


代碼很長。。但注釋也算是比較清楚的了。看懂應該不難。用了Hashmap來存放姓名數據。

 

接著還有一個 幫助 的activity。相信如果前面兩個會做的話,這個應該很快的。

下面是布局代碼和功能代碼,其中加入了 反饋 報警 。增加趣味性。。

 



    
    
    

    
    
    
    
    
        
        
    



package com.example.cw.rands;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class Main3Activity_help extends AppCompatActivity  implements View.OnTouchListener{

    //手指滑動的最小速度
    private static final int X_MinSpeed = 200;

    //手指滑動最小距離
    private static final int X_MinDistance = 150;

    //手指落下時的橫坐標
    private float X_Down;

    //手指移動時的橫坐標
    private float X_Move;

    //手指拿起時的橫坐標
    private float X_away;

    //和我聯系
    private TextView callMe;

    //報警
    private TextView call110;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3_activity_help);

        callMe=(TextView)findViewById(R.id.Call);
        call110=(TextView)findViewById(R.id.CallPlic);

        callMe.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String url="mqqwpa://im/chat?chat_type=wpa&uin=聯系人的qq號代替,此處我刪掉了";
                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
            }
        });

        call110.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:" + "110"));
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
            }
        });

        LinearLayout ll = (LinearLayout)findViewById(R.id.help_layout);
        ll.setOnTouchListener(this);
    }

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        switch (motionEvent.getAction()){
            case MotionEvent.ACTION_DOWN:{
                X_Down=motionEvent.getX();//獲取落下點的x
                break;
            }
            case MotionEvent.ACTION_UP:
                X_away=motionEvent.getX();       //獲取移動的x
                int distanceX = (int)(X_away-X_Down);
                if(distanceX>X_MinDistance){
                    finish();
                    return true;
                }
                break;
            default:
                break;
        }
        return true;
    }
}


 

那麼,至此,我們全部的工作基本都完成了。為什麼說基本呢?

因為還要自己安裝起來看看有沒有bug和不太友好的地方要修該。

 

—————————————————————————————————————————————————————————————————————————————

後記

算是第一次自己獨立完成這麼一個Android應用吧。之前在寫計算器應用的時候我還是各種百度,跌跌撞撞才完成,那時對整個一個制作還不是很熟悉。

這次這個程序難度大於計算器,但是大部分代碼都是自己直接敲進去的,很少百度,看來熟練了很多。

這條路還很長,慢慢來吧。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved