小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Android拼圖游戲開發(fā)全紀(jì)錄4

 水與火604 2016-03-13

今天我們主要實(shí)現(xiàn)我們的主界面:國際慣例:


界面我們已經(jīng)在第一天做好了,今天我們就要實(shí)現(xiàn)這個界面的功能,

分析一下,這個界面包含以下幾個功能:

1、顯示游戲的難度:使用popupwindow,選擇后改變顯示的數(shù)字

2、顯示默認(rèn)的待拼圖圖片,包含一張選擇自定義的圖片:這個比較簡單,只是GridView的最簡單應(yīng)用而已

3、自定義按鈕功能:調(diào)用系統(tǒng)圖冊和相機(jī)

4、查看記錄和了解更多:這個也是一般的應(yīng)用需求,比較簡單

  1. package com.xys.xpuzzle.activity;  
  2.   
  3. import java.io.File;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6. import android.app.Activity;  
  7. import android.app.AlertDialog;  
  8. import android.content.DialogInterface;  
  9. import android.content.Intent;  
  10. import android.database.Cursor;  
  11. import android.graphics.Bitmap;  
  12. import android.graphics.BitmapFactory;  
  13. import android.graphics.Color;  
  14. import android.graphics.drawable.ColorDrawable;  
  15. import android.graphics.drawable.Drawable;  
  16. import android.net.Uri;  
  17. import android.os.Bundle;  
  18. import android.os.Environment;  
  19. import android.provider.MediaStore;  
  20. import android.view.Gravity;  
  21. import android.view.LayoutInflater;  
  22. import android.view.View;  
  23. import android.view.View.OnClickListener;  
  24. import android.widget.AdapterView;  
  25. import android.widget.AdapterView.OnItemClickListener;  
  26. import android.widget.GridView;  
  27. import android.widget.PopupWindow;  
  28. import android.widget.TextView;  
  29. import com.xys.xpuzzle.R;  
  30. import com.xys.xpuzzle.adapter.GridPicListAdapter;  
  31.   
  32. /** 
  33.  * 程序主界面:顯示默認(rèn)圖片列表、自選圖片按鈕 
  34.  *  
  35.  * @author xys 
  36.  *  
  37.  */  
  38. public class MainActivity extends Activity implements OnClickListener {  
  39.   
  40.     // 返回碼:系統(tǒng)圖庫  
  41.     private static final int RESULT_IMAGE = 100;  
  42.     // 返回碼:相機(jī)  
  43.     private static final int RESULT_CAMERA = 200;  
  44.     // Temp照片路徑  
  45.     public static String TEMP_IMAGE_PATH;  
  46.     // IMAGE TYPE  
  47.     private static final String IMAGE_TYPE = "image/*";  
  48.     // GridView 顯示圖片  
  49.     private GridView gv_Pic_List;  
  50.     private List<Bitmap> picList;  
  51.     // 主頁圖片資源ID  
  52.     private int[] resPicId;  
  53.     // 顯示Type  
  54.     private TextView tv_puzzle_main_type_selected;  
  55.     private LayoutInflater layoutInflater;  
  56.     private PopupWindow popupWindow;  
  57.     private View popupView;  
  58.     private TextView tvType2;  
  59.     private TextView tvType3;  
  60.     private TextView tvType4;  
  61.     // 游戲類型N*N  
  62.     private int type = 2;  
  63.     // 本地圖冊、相機(jī)選擇  
  64.     private String[] customItems = new String[] { "本地圖冊", "相機(jī)拍照" };  
  65.   
  66.     @Override  
  67.     protected void onCreate(Bundle savedInstanceState) {  
  68.     super.onCreate(savedInstanceState);  
  69.     setContentView(R.layout.xpuzzle_main);  
  70.   
  71.     TEMP_IMAGE_PATH = Environment.getExternalStorageDirectory().getPath() + "/ttt.jpg";  
  72.     picList = new ArrayList<Bitmap>();  
  73.     // 初始化Views  
  74.     initViews();  
  75.     // 數(shù)據(jù)適配器  
  76.     gv_Pic_List.setAdapter(new GridPicListAdapter(MainActivity.this, picList));  
  77.     // Item點(diǎn)擊監(jiān)聽  
  78.     gv_Pic_List.setOnItemClickListener(new OnItemClickListener() {  
  79.   
  80.         @Override  
  81.         public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {  
  82.         if (position == resPicId.length - 1) {  
  83.             // 選擇本地圖庫 相機(jī)  
  84.             showDialogCustom();  
  85.         } else {  
  86.             // 選擇默認(rèn)圖片  
  87.             Intent intent = new Intent(MainActivity.this, PuzzleMain.class);  
  88.             intent.putExtra("picSelectedID", resPicId[position]);  
  89.             intent.putExtra("type", type);  
  90.             startActivity(intent);  
  91.         }  
  92.         }  
  93.     });  
  94.   
  95.     /**  
  96.      * 顯示難度Type  
  97.      */  
  98.     tv_puzzle_main_type_selected.setOnClickListener(new OnClickListener() {  
  99.   
  100.         @Override  
  101.         public void onClick(View v) {  
  102.         // 彈出popup window  
  103.         popupShow(v);  
  104.         }  
  105.     });  
  106.     }  
  107.   
  108.     // 顯示選擇系統(tǒng)圖庫 相機(jī)對話框  
  109.     private void showDialogCustom() {  
  110.     AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);  
  111.     builder.setTitle("選擇:");  
  112.     builder.setItems(customItems, new DialogInterface.OnClickListener() {  
  113.   
  114.         @Override  
  115.         public void onClick(DialogInterface dialog, int which) {  
  116.         if (0 == which) {  
  117.             // 本地相冊  
  118.             Intent intent = new Intent(Intent.ACTION_PICK, null);  
  119.             intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_TYPE);  
  120.             startActivityForResult(intent, RESULT_IMAGE);  
  121.         } else if (1 == which) {  
  122.             // 系統(tǒng)相機(jī)  
  123.             Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  
  124.             Uri photoUri = Uri.fromFile(new File(TEMP_IMAGE_PATH));  
  125.             intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);  
  126.             startActivityForResult(intent, RESULT_CAMERA);  
  127.         }  
  128.         }  
  129.     });  
  130.     builder.create().show();  
  131.     }  
  132.   
  133.     /** 
  134.      * 調(diào)用圖庫相機(jī)回調(diào)方法 
  135.      */  
  136.     @Override  
  137.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  138.     super.onActivityResult(requestCode, resultCode, data);  
  139.     if (resultCode == RESULT_OK) {  
  140.         if (requestCode == RESULT_IMAGE && data != null) {  
  141.         // 相冊  
  142.         Cursor cursor = this.getContentResolver().query(data.getData(), null, null, null, null);  
  143.         cursor.moveToFirst();  
  144.         String imagePath = cursor.getString(cursor.getColumnIndex("_data"));  
  145.         Intent intent = new Intent(MainActivity.this, PuzzleMain.class);  
  146.         intent.putExtra("picPath", imagePath);  
  147.         intent.putExtra("type", type);  
  148.         startActivity(intent);  
  149.         } else if (requestCode == RESULT_CAMERA) {  
  150.         // 相機(jī)  
  151.         Intent intent = new Intent(MainActivity.this, PuzzleMain.class);  
  152.         intent.putExtra("picPath", TEMP_IMAGE_PATH);  
  153.         intent.putExtra("type", type);  
  154.         startActivity(intent);  
  155.         }  
  156.     }  
  157.     }  
  158.   
  159.     /** 
  160.      * 顯示popup window 
  161.      *  
  162.      * @param view 
  163.      */  
  164.     private void popupShow(View view) {  
  165.     // 顯示popup window  
  166.     popupWindow = new PopupWindow(popupView, 200, 50);  
  167.     popupWindow.setFocusable(true);  
  168.     popupWindow.setOutsideTouchable(true);  
  169.     // 透明背景  
  170.     Drawable transpent = new ColorDrawable(Color.TRANSPARENT);  
  171.     popupWindow.setBackgroundDrawable(transpent);  
  172.     // 獲取位置  
  173.     int[] location = new int[2];  
  174.     view.getLocationOnScreen(location);  
  175.     popupWindow.showAtLocation(view, Gravity.NO_GRAVITY, location[0] - 40, location[1] + 50);  
  176.     }  
  177.   
  178.     /** 
  179.      * 初始化Views 
  180.      */  
  181.     private void initViews() {  
  182.     gv_Pic_List = (GridView) findViewById(R.id.gv_xpuzzle_main_pic_list);  
  183.     // 初始化Bitmap數(shù)據(jù)  
  184.     resPicId = new int[] { R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4, R.drawable.pic5, R.drawable.pic6, R.drawable.pic7,  
  185.         R.drawable.pic8, R.drawable.pic9, R.drawable.pic10, R.drawable.pic11, R.drawable.pic12, R.drawable.pic13, R.drawable.pic14,  
  186.         R.drawable.pic15, R.drawable.plus };  
  187.     Bitmap[] bitmaps = new Bitmap[resPicId.length];  
  188.     for (int i = 0; i < bitmaps.length; i++) {  
  189.         bitmaps[i] = BitmapFactory.decodeResource(getResources(), resPicId[i]);  
  190.         picList.add(bitmaps[i]);  
  191.     }  
  192.     // 顯示type  
  193.     tv_puzzle_main_type_selected = (TextView) findViewById(R.id.tv_puzzle_main_type_selected);  
  194.     layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);  
  195.     // type view  
  196.     popupView = layoutInflater.inflate(R.layout.xpuzzle_main_type_selected, null);  
  197.     tvType2 = (TextView) popupView.findViewById(R.id.tv_main_type_2);  
  198.     tvType3 = (TextView) popupView.findViewById(R.id.tv_main_type_3);  
  199.     tvType4 = (TextView) popupView.findViewById(R.id.tv_main_type_4);  
  200.   
  201.     // 監(jiān)聽事件  
  202.     tvType2.setOnClickListener(this);  
  203.     tvType3.setOnClickListener(this);  
  204.     tvType4.setOnClickListener(this);  
  205.     }  
  206.   
  207.     /** 
  208.      * popup window item點(diǎn)擊事件 
  209.      */  
  210.     @Override  
  211.     public void onClick(View v) {  
  212.     switch (v.getId()) {  
  213.     // Type  
  214.     case R.id.tv_main_type_2:  
  215.         type = 2;  
  216.         tv_puzzle_main_type_selected.setText("2 X 2");  
  217.         break;  
  218.     case R.id.tv_main_type_3:  
  219.         type = 3;  
  220.         tv_puzzle_main_type_selected.setText("3 X 3");  
  221.         break;  
  222.     case R.id.tv_main_type_4:  
  223.         type = 4;  
  224.         tv_puzzle_main_type_selected.setText("4 X 4");  
  225.         break;  
  226.     default:  
  227.         break;  
  228.     }  
  229.     popupWindow.dismiss();  
  230.     }  
  231. }  

注釋還是比較清晰的,相信大家都看得懂。

下面還有送一個數(shù)據(jù)適配器:

  1. package com.xys.xpuzzle.adapter;  
  2.   
  3. import java.util.List;  
  4.   
  5. import android.R.color;  
  6. import android.content.Context;  
  7. import android.graphics.Bitmap;  
  8. import android.view.View;  
  9. import android.view.ViewGroup;  
  10. import android.widget.BaseAdapter;  
  11. import android.widget.GridView;  
  12. import android.widget.ImageView;  
  13.   
  14. /** 
  15.  * 程序主界面數(shù)據(jù)適配器 
  16.  *  
  17.  * @author xys 
  18.  *  
  19.  */  
  20. public class GridPicListAdapter extends BaseAdapter {  
  21.   
  22.     // 映射List  
  23.     private List<Bitmap> picList;  
  24.     private Context context;  
  25.   
  26.     public GridPicListAdapter(Context context, List<Bitmap> picList) {  
  27.     this.context = context;  
  28.     this.picList = picList;  
  29.     }  
  30.   
  31.     @Override  
  32.     public int getCount() {  
  33.     return picList.size();  
  34.     }  
  35.   
  36.     @Override  
  37.     public Object getItem(int position) {  
  38.     return picList.get(position);  
  39.     }  
  40.   
  41.     @Override  
  42.     public long getItemId(int position) {  
  43.     return position;  
  44.     }  
  45.   
  46.     @Override  
  47.     public View getView(int position, View convertView, ViewGroup arg2) {  
  48.     ImageView iv_pic_item = null;  
  49.     if (convertView == null) {  
  50.         iv_pic_item = new ImageView(context);  
  51.         // 設(shè)置布局 圖片  
  52.         iv_pic_item.setLayoutParams(new GridView.LayoutParams(80, 100));  
  53.         // 設(shè)置顯示比例類型  
  54.         iv_pic_item.setScaleType(ImageView.ScaleType.FIT_XY);  
  55.     } else {  
  56.         iv_pic_item = (ImageView) convertView;  
  57.     }  
  58.     iv_pic_item.setBackgroundColor(color.black);  
  59.     iv_pic_item.setImageBitmap(picList.get(position));  
  60.     return iv_pic_item;  
  61.     }  
  62. }  

今天的難點(diǎn)在于調(diào)用系統(tǒng)圖冊和相機(jī):

1、調(diào)用的Intent在代碼中已經(jīng)寫清楚了

2、調(diào)用相機(jī)的時候,如果直接返回data,其實(shí)是返回的相機(jī)縮略圖,如果要獲得原始圖片,就需要先保存在SD卡上,再去獲取這張圖片,希望大家注意。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多