图片缩放

//调节图片大小
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"