图片缩放
//调节图片大小
public static Bitmap imageScale(Bitmap bitmap, int dst_w, int dst_h) {
int src_w = bitmap.getWidth();
int src_h = bitmap.getHeight();
float scale_w = ((float) dst_w) / src_w;
float scale_h = ((float) dst_h) / src_h;
Matrix matrix = new Matrix();
matrix.postScale(scale_w, scale_h);
Bitmap dstbmp = Bitmap.createBitmap(bitmap, 0, 0, src_w, src_h, matrix,
true);
return dstbmp;
}
获取网络图片
//获取网络图片
public static Bitmap getBitmap(String path) throws IOException {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setConnectTimeout(8000);
conn.setRequestMethod("GET");
if(conn.getResponseCode() == 200){
InputStream inputStream = conn.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
}
return null;
}
Handler
在主线程无法进行网络请求,子线程无法进行UI更新,所以就需要handler处理机制
public static Handler mHandler;
//在onCreate()中初始化handler对象
private void initHandle(){
//新建Handler对象
mHandler = new Handler(){
//handleMessage为处理消息的方法
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what == 1) {
//UI操作.......
}
}
};
}
//在子线程中发送消息请求
Message msg = new Message();
msg.what = 1;
mHandler.sendMessage(msg);
自适应屏幕
//创建常量类
public class Constant {
public static int displayWidth; //屏幕宽度
public static int displayHeight; //屏幕高度
}
在onCreate()函数中,初始化获取屏幕长宽
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
Constant.displayWidth = displayMetrics.widthPixels;
Constant.displayHeight = displayMetrics.heightPixels;
// 第一个按钮,宽度100%,高度10%
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
(int) (Constant.displayHeight * 0.1f + 0.5f));
btn1.setLayoutParams(params);
// 第二个按钮,宽度50%,高度20%
LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams(
(int) (Constant.displayWidth * 0.5f + 0.5f),
(int) (Constant.displayHeight * 0.2f + 0.5f));
btn2.setLayoutParams(params2);
// 第三个按钮,宽度70%,高度填满剩下的空间
LinearLayout.LayoutParams params3 = new LinearLayout.LayoutParams(
(int) (Constant.displayWidth * 0.7f + 0.5f),
LinearLayout.LayoutParams.MATCH_PARENT);
btn3.setLayoutParams(params3);
dp和px互转
//dp转换成像素
public static int dp2px(int value, Context context)
{
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value,context.getResources().getDisplayMetrics() );
}
//像素转换成dp
public static int px2dp(int value,Context context)
{
return (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, value,context.getResources().getDisplayMetrics() );
}
实现App全屏,隐藏状态栏和虚拟按键
直接在activity中调用方法即可,快去试试吧!
private fun hideSystemNavigationBar() {
if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) {
val view: View = this.window.decorView
view.systemUiVisibility = View.GONE
} else if (Build.VERSION.SDK_INT >= 19) {
val decorView: View = window.decorView
val uiOptions: Int = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or View.SYSTEM_UI_FLAG_FULLSCREEN)
decorView.systemUiVisibility = uiOptions
}
}
沉浸式标题栏
<style name="FlagTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentNavigation">false</item>
</style>
在AndroidManifest.xml中修改
android:theme="@style/FlagTheme"