android開發-更改狀態列的顏色-獲取螢幕解析度-獲取下拉框被選中的內容-判斷當前圖片框裡的圖片是否是指定的圖片-設定按鈕的監聽事件-設定下拉框的顯示內容-實現照相功能,並且在圖片框裡顯示

咩圖發表於2020-12-08

更改狀態列的顏色

<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
在res檔案下的styles.xml檔案裡name為colorPrimaryDark的顏色引用就可以更改狀態列的顏色

獲取螢幕解析度

public int[] getpingmufenbianlv(){//獲取螢幕解析度,返回寬和高,單位是px
        DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        int[] a=new int[]{ displayMetrics.widthPixels,displayMetrics.heightPixels};
        return a;
    }

獲取下拉框被選中的內容

String str = spinner.getSelectedItem().toString();

判斷當前圖片框裡的圖片是否是指定的圖片

img.getDrawable().getConstantState().equals(getResources().getDrawable(R.drawable.big_circle).getConstantState())

設定按鈕的監聽事件

按鈕.setOnClickListener(new View.OnClickListener() {
一般監聽事件的底層執行機制都是多執行緒
            @Override
            public void onClick(View view) {
                當按鈕被點選時將會執行此區間
            }
        });

設定下拉框的監聽事件

spinner.setOnItemSelectedListener(this);
此方法需要傳一個AdapterView.OnItemSelectedListener型別的物件
此類是介面所以不能new只能implements AdapterView.OnItemSelectedListener
然後實現介面就可以了int i,這裡i說的是下拉框選中的是第幾個第一個為0

設定下拉框的顯示內容

public void setSpinnerText(Spinner spinner, String[] blood){
        ArrayAdapter<String> adapter= new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,blood);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);//給下拉框賦值
    }

實現照相功能,並且在圖片框裡顯示

//以下程式碼是為了開啟相機並將命名的照片儲存到指定位置------------------------------------------------
    public void zhaoxiang(View v){
        zp=getIntent().getStringExtra("p_name")+getIntent().getStringExtra("tube")
                +getIntent().getStringExtra("jh")+gxfx.getText().toString();
        //建立File物件,用於儲存拍照後的圖片
        File outputImage=new File(getExternalCacheDir(),zp+".jpg");
        try{
            if (outputImage.exists())
            {
                outputImage.delete();
            }
            outputImage.createNewFile();
        }catch (IOException e)
        {
            e.printStackTrace();
        }
        if (Build.VERSION.SDK_INT>=24){
            imageUri= FileProvider.getUriForFile(this,
                    "com.example.administrator.ycyy_dc.fileprovider",outputImage);
//"com.example.administrator.ycyy_dc.fileprovider"此字串為關鍵字.getUriForFile()方法會去AndroidManifest.xml裡找以下配置
//<provider
//           android:name="android.support.v4.content.FileProvider"
//            android:authorities="com.example.administrator.ycyy_dc.fileprovider"
//           android:exported="false"
//            android:grantUriPermissions="true">
//            <meta-data
//              android:name="android.support.FILE_PROVIDER_PATHS"
//                android:resource="@xml/file_paths" />      //android:resource="@xml/file_paths" />又會去找res下的xml資料夾下的
//        </provider>                                                       //file_paths.xml

                                                                                    //<?xml version="1.0" encoding="utf-8"?>
                                                                                     //<paths xmlns:android="http://schemas.android.com/apk/res/android">
                                                                                    //    <external-path
                                                                                    //       name="my_image"
                                                                                    //        path="/" />
                                                                                    //</paths>


                                                                                   




        }else{
            imageUri= Uri.fromFile(outputImage);
        }
        // 啟動相機程式
        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
        startActivityForResult(intent,1);
    }
//以上程式碼是為了開啟相機並將命名的照片儲存到指定位置------------------------------------------------
//以下程式碼是為了顯示照片----------------------------------------------------------------------------
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        int iw,ih,vw,vh;
        //使用者操作完成,結果碼返回是-1,即RESULT_OK
        if(resultCode==RESULT_OK){
            if(imageUri!=null){
                try {
                    //此處是為了照片顯示時具有訪問許可權
                if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
                }

                //將拍攝的照片顯示出來
                   // Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
                    BitmapFactory.Options option = new BitmapFactory.Options();
                    option.inJustDecodeBounds = true;
                    //BitmapFactory.decodeFile(imageUri.getPath(),option);
                    BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri),null,option);
                    iw = option.outWidth;
                    ih = option.outHeight;
                    vw = imageView.getWidth();
                    vh = imageView.getHeight();
                    int scaleFactor = Math.min(iw/vw,ih/vh);
                    option.inJustDecodeBounds = false;
                    option.outHeight = 174;
                    //option.outWidth = 368;
                    option.inSampleSize = 10;
                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri),null,option);
                    imageView.setImageBitmap(bitmap);
                }catch (FileNotFoundException e) {
                    e.printStackTrace();
              }
            }
        }else{
            //操作錯誤或沒有選擇圖片
            Log.i("MainActivtiy", "operation error");
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

相關文章