一、android实用代码段(持续更新)


#常用的代码片段

1.双击回退按钮退出程序

	boolean isExit = false;

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			Log.e(TAG + "======", "keyback====");
			if (!isExit) {
				isExit = true;
				Toast.makeText(m_context, R.string.exit_str, Toast.LENGTH_SHORT)
						.show();
				new Handler().postDelayed(new Runnable() {
					public void run() {
						isExit = false;
					}
				}, 2000);
				;

				return false;

			} else {
				Log.e(TAG + "======", "退出应用");
				android.os.Process.killProcess(android.os.Process.myPid());
				System.exit(0);
				//
			}
		}

		return false;
	}

2.拍照或者相册选择照片

    private static final int PICK_PHOTO_FOR_AVATAR = 1024;
    private static final int TAKE_PHOTO_FOR_AVATAR = 110;
    Uri originalUri;
    private void selectPhotoFromGallery() {
        // Create intent for picking a photo from the gallery

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");
        startActivityForResult(intent, PICK_PHOTO_FOR_AVATAR);
    }

    private void getPhotoFromCamera() {
        // 调用相机
        Intent mIntent = new Intent("android.media.action.IMAGE_CAPTURE");
        // 图片存储路径,可自定义
        File tmpFile = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis() + ".jpg");
        // 获取这个图片的URI
        originalUri = Uri.fromFile(tmpFile);//这是个实例变量,方便下面获取图片的时候用
        mIntent.putExtra(MediaStore.EXTRA_OUTPUT, originalUri);
        startActivityForResult(mIntent, TAKE_PHOTO_FOR_AVATAR);
    }



    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode != RESULT_OK) {
            return;
        }
        ;


        switch (requestCode) {
            case PICK_PHOTO_FOR_AVATAR:
                InputStream inputStream = null;
                if (data == null) return;
                try {
                    inputStream = getContentResolver().openInputStream(data.getData());
                    userHeadIv.setImageBitmap(BitmapFactory.decodeStream(inputStream));
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                break;
            case TAKE_PHOTO_FOR_AVATAR:
                try {
                    FileInputStream fileInput = (FileInputStream) getContentResolver().openInputStream(Uri.parse(originalUri.toString()));
//                    inputStream = getContentResolver().openInputStream(data.getData());
                    userHeadIv.setImageBitmap(BitmapFactory.decodeStream(fileInput));
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                break;
            default:

                break;

        }

3.文件拷贝

    private void inputStream2File(InputStream ins, File file) {
//        File file = new File(path);
        OutputStream outputStream = null;
        try {

            outputStream = new FileOutputStream(file);
            int bytesRead = 0;
            byte[] bytes = new byte[1024];
            int read = 0;
            while ((read = inputStream.read(bytes)) != -1) {
                outputStream.write(bytes, 0, read);
            }
            outputStream.close();
//            ins.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

4.获取视频的第一帧图片

    public static Bitmap getVideoFirstFrame(String localPath){
        Bitmap bitmap = null;
        if (TextUtils.isEmpty(localPath)){
            LogUtil.error(Constants.TAG,"getVideoFirstFrame localPath is null");
            return bitmap;
        };

        File file = new File(localPath);
        if (!file.exists()){
            LogUtil.error(Constants.TAG,"getVideoFirstFrame file is not exists");
            return bitmap;
        }
        MediaMetadataRetriever mmr=new MediaMetadataRetriever();//实例化MediaMetadataRetriever对象
        mmr.setDataSource(localPath);
        Bitmap firstFramBitmap = mmr.getFrameAtTime();
        return firstFramBitmap;

    }

5.根据秒来获取小时、分钟、秒

	public static String getTimeStrBySecond(long second) {
        int hour = (int)second/3600;
		int m = (int)(second-hour*3600)/60;
		int s= (int)(second-hour*3600- m*60) ;
        String hh = hour<10?"0"+hour:hour+"";
		String mm = m < 10 ? "0"+m: m+"";
		String ss = s < 10 ? "0"+s: s+"";
	    String timeStr = hh+":"+ mm+":"+ss;
		return timeStr;
	}

6.监听键盘状态

ViewTreeObserver.OnGlobalLayoutListener globalLayoutListener =  new ViewTreeObserver.OnGlobalLayoutListener() {
        private boolean isKeyboardUp;

        @Override
        public void onGlobalLayout() {
            final View rootView = getWindow().getDecorView().findViewById(android.R.id.content);
            Rect r = new Rect();
            rootView.getWindowVisibleDisplayFrame(r);
            int screenHeight = rootView.getRootView().getHeight();

            // r.bottom is the position above soft keypad or device button.
            // if keypad is shown, the r.bottom is smaller than that before.
            int keypadHeight = screenHeight - r.bottom;

            Log.d(TAG, "keypadHeight = " + keypadHeight);

            if (keypadHeight > screenHeight * 0.15) { // 0.15 ratio is perhaps enough to determine keypad height.
                // keyboard is opened
                linExtention.setVisibility(GONE);
            }
            else {
                // keyboard is closed
            }

        }
    };

7.inputStream to string

static String convertStreamToString(java.io.InputStream is) {
    java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
    return s.hasNext() ? s.next() : "";
}

8.点击隐藏键盘

 Rect mRect = new Rect();
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        final int action = MotionEventCompat.getActionMasked(ev);

        int[] location = new int[2];
        chatBottomview.getInputEt().getLocationOnScreen(location);
        mRect.left = location[0];
        mRect.top = location[1];
        mRect.right = location[0] + chatBottomview.getInputEt().getWidth();
        mRect.bottom = location[1] + chatBottomview.getInputEt().getHeight();

        int x = (int) ev.getX();
        int y = (int) ev.getY();

        if (action == MotionEvent.ACTION_DOWN && !mRect.contains(x, y)) {
            InputMethodManager input = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            input.hideSoftInputFromWindow(chatBottomview.getInputEt().getWindowToken(), 0);
        }
        return super.dispatchTouchEvent(ev);
    }

9.获取状态栏高度

   private int getStatusBarHeight() {
        int sStatusBarHeight = 0;
            try {
                Class<?> c = Class.forName("com.android.internal.R$dimen");
                Object o = c.newInstance();
                Field field = c.getField("status_bar_height");
                int x = (Integer) field.get(o);
                sStatusBarHeight = getResources().getDimensionPixelSize(x);
            } catch (Exception e) {
                e.printStackTrace();
            }
        return sStatusBarHeight;
    }

10.拖动View

float dX, dY;

@Override
public boolean onTouch(View view, MotionEvent event) {

    switch (event.getAction()) {

        case MotionEvent.ACTION_DOWN:

            dX = view.getX() - event.getRawX();
            dY = view.getY() - event.getRawY();
            break;

        case MotionEvent.ACTION_MOVE:

            view.animate()
                    .x(event.getRawX() + dX)
                    .y(event.getRawY() + dY)
                    .setDuration(0)
                    .start();
            break;
        default:
            return false;
    }
    return true;
}

11.相册多选

启动选择:

 Intent intent = new Intent();
 intent.setType("image/*");
 intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
 intent.setAction(Intent.ACTION_GET_CONTENT);
 startActivityForResult(Intent.createChooser(intent,"Select Picture"), PICK_IMAGE_MULTIPLE);

接收返回数据:

 if (data.getClipData() != null) {
                    ClipData mClipData = data.getClipData();
                    ArrayList<Uri> mArrayUri = new ArrayList<Uri>();
                    for (int i = 0; i < mClipData.getItemCount(); i++) {

                        ClipData.Item item = mClipData.getItemAt(i);
                        Uri uri = item.getUri();
                        mArrayUri.add(uri);
                        // Get the cursor
                        Cursor cursor = getContentResolver().query(uri, filePathColumn, null, null, null);
                        // Move to first row
                        cursor.moveToFirst();

                        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                        imageEncoded  = cursor.getString(columnIndex);
                        imagesEncodedList.add(imageEncoded);
                        cursor.close();

                    }
                    Log.v("LOG_TAG", "Selected Images" + mArrayUri.size());
                }

12.拷贝assets文件

private static boolean copyAsset(AssetManager assetManager,
                                     String fromAssetPath, String toPath) {
        InputStream in = null;
        OutputStream out = null;
        try {
            in = assetManager.open(fromAssetPath);
            new File(toPath).createNewFile();
            out = new FileOutputStream(toPath);
            copyFile(in, out);
            in.close();
            in = null;
            out.flush();
            out.close();
            out = null;
            return true;
        } catch(Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    private static void copyFile(InputStream in, OutputStream out) throws IOException {
        byte[] buffer = new byte[1024];
        int read;
        while((read = in.read(buffer)) != -1){
            out.write(buffer, 0, read);
        }
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值