• android 屏幕分辨率获取,等比缩放,屏幕横竖屏设置,屏幕截取



    分辨率及密度获取:

    DisplayMetrics dm = new DisplayMetrics(); 
    dm = getResources().getDisplayMetrics(); 
    int screenWidth = dm.widthPixels; 
    int screenHeight = dm.heightPixels; 
    float density = dm.density; 
    float xdpi = dm.xdpi; 
    float ydpi = dm.ydpi;

    对于不同分辨率屏幕等比缩放方法:

    private int getValues_x(int value_x)
    	{
    		return (int)((float)value_x/480*width);
    	}
    	
    	private int getValues_y(int value_y)
    	{
    		return (int)((float)value_y/854*height);
    	}

    屏幕朝向设置:

    //强制为横屏   
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);  
    要设置成竖屏设置成 SCREEN_ORIENTATION_PORTRAIT

    AndroidManifest.xml 中设置屏幕朝向
    <activity android:name=".HandlerActivity" android:screenOrientation="landscape"/>
    <activity android:name=".HandlerActivity" android:screenOrientation="portrait"/>


    设置app在不同分辨率时,是否支持多密度的方法。
    <manifest xmlns:android="http://schemas.android.com/apk/res/android">
    ...
    <supports-screens
    android:smallScreens="true"
    android:normalScreens="true"
    android:largeScreens="true"
    android:xlargeScreens="true"
    android:anyDensity="true" />
    </manifest>


    dp与px转换的方法:

    public static int dip2px(Context context, float dipValue){
      final float scale = context.getResources().getDisplayMetrics().density;
      return (int)(dipValue * scale +0.5f);
    }


    public static int px2dip(Context context, float pxValue){
      final float scale = context.getResource().getDisplayMetrics().density;
      return (int)(pxValue / scale +0.5f);
    }


    屏幕截取实现:

    1,

    /** 
             * 简易截屏方法 
             * @param v         视图 
             * @param filePath  保存路径 
             */  
            private void getScreenHot(View v, String filePath) {          
                try  
                {  
                    Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Config.ARGB_8888);  
                    Canvas canvas = new Canvas();  
                    canvas.setBitmap(bitmap);  
                    v.draw(canvas);  
          
                    try{  
                        FileOutputStream fos = new FileOutputStream(filePath);  
                        bitmap.compress(CompressFormat.PNG, 90, fos);  
                    }catch (FileNotFoundException e){  
                        Log.e("errormsg", e.toString());  
                        Toast.makeText(this, "找不到路径", 200).show();  
                    }  
                }catch (Exception e){  
                    Log.e("errormsg", e.toString());  
                  Toast.makeText(this, "截图失败", 200).show();  
                }  
            }  

    调用getScreenHot((View) getWindow().getDecorView(), "/sdcard/pic1.png"); 即可

    2,

    /** 
     * 获取和保存当前屏幕的截图 
     */  
    private void SaveCurrentImage()    
    {    
        //创建Bitmap    
        WindowManager windowManager = getWindowManager();    
        Display display = windowManager.getDefaultDisplay();    
        int w = display.getWidth();    
        int h = display.getHeight();    
            
        Bitmap bmp = Bitmap.createBitmap( w, h, Config.ARGB_8888 );        
            
        //获取屏幕    
        View decorview = this.getWindow().getDecorView();     
        decorview.setDrawingCacheEnabled(true);     
        bmp = decorview.getDrawingCache();     
          
        String SavePath = getSDCardPath()+"/ScreenImage";  
        
        //存储为Bitmap     
        try {    
            SimpleDateFormat sdf = new SimpleDateFormat(  
                    "yyyy-MM-dd_HH-mm-ss", Locale.CHINA);  
                  
            File path = new File(SavePath);    
            //文件    
            String filepath = SavePath + "/"+sdf.format(new Date()) + ".png";    
            File file = new File(filepath);    
            if(!path.exists()){    
                path.mkdirs();    
            }    
            if (!file.exists()) {    
                file.createNewFile();    
            }    
                
            FileOutputStream fos = null;    
            fos = new FileOutputStream(file);    
            if (null != fos) {    
                bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);    
                fos.flush();    
                fos.close();      
                    
                Toast.makeText(this, "截屏文件已保存至SDCard/ScreenImage/下", Toast.LENGTH_LONG).show();    
            }    
        
        } catch (Exception e) {    
            e.printStackTrace();    
        }    
    }    






  • 相关阅读:
    【对拍√】
    hdu5791 TWO
    luogu P1220 关路灯
    【NOI2001】食物链
    【HAOI2016】食物链
    luogu P1006 传纸条
    可持久化平衡树
    可持久化并查集
    线段树合并(【POI2011】ROT-Tree Rotations)
    可持久化数组
  • 原文地址:https://www.cnblogs.com/happyxiaoyu02/p/6818985.html
Copyright © 2020-2023  润新知