创建 PintuActivity.class

 

package com.example.pintu;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.example.myzhipai.R;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;

public class PintuActivity extends Activity {

    private ImageView imgv;
    private Bitmap bitmap;

    private Button xc_but, jiandan_but, zhongji_but, kunnan_but, yanzheng_but;
    private GridView gv;
    private List data;
    private ImageSplitter imagesplittter;
    int size = 3;

    Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            int i = (Integer) msg.obj;
            switch (i) {
            case 1:
                
                BitmapGoAway(size);
                break;
            case 2:
                imgv.setVisibility(View.VISIBLE);

                break;

            }
        };
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pintu);
        // 竖屏
        if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
        InItViews();

    }

    private void BitmapGoAway(int size) {
        
        imgv.setVisibility(View.VISIBLE);
        CountDownTimer count = new CountDownTimer(size  * 1000, 1000) {

            @Override
            public void onTick(long millisUntilFinished) {
                // getNum.setText(millisUntilFinished/1000+"秒");
            }

            @Override
            public void onFinish() {
                // getNum.setClickable(true);
                // getNum.setText("获取验证码");
                imgv.setVisibility(View.INVISIBLE);
            }
        };
        count.start();

    }

    private void InItViews() {
        // TODO Auto-generated method stub
        gv = (GridView) findViewById(R.id.pintu_grod);
        imgv = (ImageView) findViewById(R.id.image);
        jiandan_but = (Button) findViewById(R.id.pintu_jiandan_but);
        zhongji_but = (Button) findViewById(R.id.pintu_zhongji_but);
        kunnan_but = (Button) findViewById(R.id.pintu_kunnan_but);
        xc_but = (Button) findViewById(R.id.act_xc_but);
        yanzheng_but = (Button) findViewById(R.id.act_yanzheng_but);

        imagesplittter = new ImageSplitter();

        ViewOper();
    }

    private static final int PHOTO_REQUEST_CAMER = 1;// 用相机拍照
    private static final int PHOTO_REQUEST_GALLERY = 2;// 从相册中选择
    private static final int PHOTO_REQUEST_CUT = 3;// 结果

    private void ViewOper() {

        xc_but.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                // 激活系统图库,选择一张图片
                Intent intent = new Intent(Intent.ACTION_PICK);
                intent.setType("image/*");
                // 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_GALLERY
                startActivityForResult(intent, PHOTO_REQUEST_GALLERY);

                // Intent intent = new
                // Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                //
                 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                // intent.putExtra("return-data", true);
                // intent.setType("image/*");
                // //剪裁
                // intent.putExtra("crop", "circleCrop");
                // //比例
                // intent.putExtra("aspectX",1);
                // intent.putExtra("aspectY",1);
                // //大小
                // intent.putExtra("outputX", 50);
                // intent.putExtra("outputY", 50);
                // startActivityForResult(intent, 1);
                //
                //
                // startActivityForResult(intent, 1);

            }
        });

        jiandan_but.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                StartGame(3);
                size = 3;
            }
        });
        zhongji_but.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                StartGame(6);
                size = 6;
            }
        });
        kunnan_but.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                StartGame(9);
                size = 9;
            }
        });

        yanzheng_but.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                gameover = 0;
                for (int i = 0; i < data.size() - 1; i++) {
                    if (data.get(i + 1).index - data.get(i).index != 1) {
                        Toast.makeText(PintuActivity.this, "验证失败", Toast.LENGTH_SHORT).show();
                        Message message = handler.obtainMessage();
                        message.obj = 1;
                        handler.sendMessage(message);
                        return;
                    } else {
                        gameover++;
                        if (gameover == data.size() - 1) {
                            Toast.makeText(PintuActivity.this, "恭喜你", Toast.LENGTH_SHORT).show();
                        }
                    }
                }
            }
        });

    }

    /**
     * 游戏结束标识
     */
    int gameover = 0;

    ActMainGvAdapter actMainGvAdapter;

    private void StartGame(int size) {

        if (bitmap == null) {
            Toast.makeText(PintuActivity.this, "请选择图片", Toast.LENGTH_SHORT).show();
            return;
        }

        Message message = handler.obtainMessage();
        message.obj = 2;
        handler.sendMessage(message);

        gameover = 0;
        data = createRandomList(imagesplittter.split(bitmap, size, size, size), size * size);
        // data = imagesplittter.split(bitmap, size, size,size);

        // 给GridView 设置宽高
        LayoutParams params = gv.getLayoutParams();
        params.height = bitmap.getWidth() * 2;
        params.width = (int) (bitmap.getHeight() * 2);
        gv.setLayoutParams(params);
        // 给GridView 设置adapter
        actMainGvAdapter = new ActMainGvAdapter(PintuActivity.this, data);
        // 给GridView设置列数
        gv.setNumColumns(size);
        // gv.setBackgroundColor(Color.RED);
        gv.setBackgroundColor(Color.parseColor("#ff0000"));
        gv.setAdapter(actMainGvAdapter);

        CountDownTimer count = new CountDownTimer(size * 3 * 1000, 1000) {

            @Override
            public void onTick(long millisUntilFinished) {
                // TODO Auto-generated method stub
                // getNum.setText(millisUntilFinished/1000+"秒");
            }

            @Override
            public void onFinish() {
                // TODO Auto-generated method stub
                // getNum.setClickable(true);
                // getNum.setText("获取验证码");
                imgv.setVisibility(View.INVISIBLE);
            }
        };
        count.start();

        MovePic(size);
    }

    /**
     * 是否是第一次点击 true 是第一次,false 不是第一次点击
     */
    boolean firstclick = true;
    /**
     * 第一次点击的item id
     */
    int startid;
    /**
     * 第二次点击的item id
     */
    int endid;

    /**
     * 移动图片
     *
     * @param size
     *            现在是 那个游戏模式 3、6、9
     */
    public void MovePic(final int size) {

        gv.setOnItemClickListener(new OnItemClickListener() {

            @SuppressLint("NewApi")
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // TODO Auto-generated method stub

                view.setAnimation(AnimationManger.MakeLearAnimation());

                if (firstclick) {
                    startid = position;
                    firstclick = false;
                } else {
                    firstclick = true;
                    endid = position;
                    // 如果是前后点击
                    if (startid - endid == 1 || endid - startid == 1) {
                        // 将list中 指定的元素对换位置
                        Collections.swap(data, startid, endid);

                        actMainGvAdapter.notifyDataSetChanged();

                    }
                    // 如果是上下点击
                    if (startid - endid == size || endid - startid == size) {
                        // 将list中 指定的元素对换位置
                        Collections.swap(data, startid, endid);

                        actMainGvAdapter.notifyDataSetChanged();
                    }
                }
            }
        });

    }

    /**
     * 将list集合内容打散
     *
     * @param list
     *            要打散的list
     * @param n
     *            要打散前多少个
     * @return 返回打散后的list
     */
    private List createRandomList(List list, int n) {
        Map map = new HashMap();
        List listNew = new ArrayList();
        while (map.size() < n) {
            int random = (int) (Math.random() * list.size());
            if (!map.containsKey(random)) {
                map.put(random, "");
                listNew.add(list.get(random));
            }
        }
        return listNew;

    }

    /*
     * 剪切图片
     */
    private void crop(Uri uri) {
        // 看到有人问裁剪的路径
        // 获取系统时间 然后将裁剪后的图片保存至指定的文件夹

        SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyyMMddhhmmss");
        String address = sDateFormat.format(new java.util.Date());
        Uri imageUri = Uri.parse("aaaaa/" + address + ".JPEG");

        // 裁剪图片意图
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        intent.putExtra("crop", "true");
        // 裁剪框的比例,1:1
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        // 裁剪后输出图片的尺寸大小
        intent.putExtra("outputX", 486);
        intent.putExtra("outputY", 486);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);// 输出路径
        intent.putExtra("outputFormat", "JPEG");// 图片格式
        intent.putExtra("noFaceDetection", false);// 取消人脸识别 true 取消, false 不取消
        intent.putExtra("return-data", true);


        // 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CUT
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == PHOTO_REQUEST_GALLERY) {
            // 从相册返回的数据
            if (data != null) {
                // 得到图片的全路径
                Uri uri = data.getData();
                crop(uri);
            }
        } else if (requestCode == PHOTO_REQUEST_CUT) {
            // 从剪切图片返回的数据
            if (data != null) {
                bitmap = data.getParcelableExtra("data");
                imgv.setImageBitmap(bitmap);
                // imgv.setImageBitmap(bitmap);
                StartGame(3);
                size = 3;
            }

        }
//        super.onActivityResult(requestCode, resultCode, data);

    }

}

 

创建 adapter类  ActMainGvAdapter.class

 

package com.example.pintu;

import java.util.List;

import com.example.myzhipai.R;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.ImageView;

public class ActMainGvAdapter extends BaseAdapter{
    LayoutInflater inflater;
    Activity activity;
    ListgvImgs;
    public ActMainGvAdapter(Activity act,List gvImgs) {
        this.inflater = LayoutInflater.from(act);
        activity=act;
        this.gvImgs=gvImgs;
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return gvImgs.size();
    }
    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return gvImgs.get(position);
    }
    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    
    @Override
    public View getView(int position, View v, ViewGroup parent) {
        ImageView iv;

        v = inflater.inflate(R.layout.act_gv_item, null);
        
        iv = (ImageView) v.findViewById(R.id.act_gv_item_imag);
//
        
        LayoutParams params = iv.getLayoutParams();
        params.height=gvImgs.get(position).bitmap.getWidth()*2;
        params.width =gvImgs.get(position).bitmap.getHeight()*2;
        iv.setLayoutParams(params);
        
        iv.setImageBitmap(gvImgs.get(position).bitmap);//setBackgroundResource(gvImgs.get(position));
        return v;
    }
}

创建item布局 act_gv_item.xml

 

<?xml version="1.0" encoding="utf-8"?>
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
             android:layout_width="83.3dp"
        android:layout_height="83.3dp"
        android:src="@drawable/ic_launcher"
        android:scaleType="fitXY"
        android:id="@+id/act_gv_item_imag"
        />
    
    

 

 

清单文件

                android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar"
            >

记得加权限

 

 

更多相关文章

  1. 拍照(连续拍照 焦距 压缩图像)
  2. Android利用universal-image-loader异步加载大量图片完整示例
  3. 使用Bitmap遍历Assets目录下图片
  4. android之ImageSwitcher 图片查看
  5. android JS互交图片点击事件
  6. android framework之Audio
  7. Android(安卓)ListView异步加载图片
  8. listview使用BaseAdapter显示图片和文字
  9. absolutelayout 实现图片重叠

随机推荐

  1. Linux下mysql 5.7 部署及远程访问配置
  2. mysql 5.7.18 Installer安装下载图文教程
  3. mysql 5.7.18 MSI安装图文教程
  4. mysql installer community 5.7.16安装详
  5. mysql 5.7.18 Archive压缩版安装教程
  6. mysql 5.7 zip archive版本安装教程
  7. mysql installer web community 5.7.21.0
  8. mysql 8.0.11 MSI版安装配置图文教程
  9. Windows10下mysql 8.0.12 解压版安装图文
  10. mysql server 5.7.20 安装配置方法图文教