文章目录
#常用的代码片段
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);
}
}