2017-06-15 10 views
0

私はこれを行う方法を探していました。カメラとギャラリーにアクセスして、データベースに画像をアップロードすることができます。しかし、これは私がやりたいことです。私は自分のアクティビティで写真を撮りたい、同じアクティビティでテキストを追加して、同じアクティビティでサムネイルで写真を表示したいと思います。 (WhatsAppのものに似ています)。カメラからの画像のキャプチャと同じアクティビティでの表示。 -Xamarin

多くのチュートリアルでは、imageviewとtextviewが表示されていますが、同じアクティビティで画像は表示されません。 これはどのように達成するのですか?

答えて

1

多くのチュートリアルでは、imageviewとtextviewが表示されていますが、同じアクティビティで画像は表示されません。どのように私はこれを達成するのですか?

あなたはあなたの活動のレイアウトでプレビューを入れて、(以下の手順)撮影後の画像を圧縮して表示することができます:

  1. は、カメラのプレビューのためのプレビュークラスを作成します。

    public class Preview : SurfaceView, ISurfaceHolderCallback 
    { 
        private Android.Hardware.Camera mCamera; 
    
        public Preview(Context context, Android.Hardware.Camera camera):base(context) 
        { 
         mCamera = camera; 
         Holder.AddCallback(this); 
         // deprecated setting, but required on Android versions prior to 3.0 
         Holder.SetType(SurfaceType.PushBuffers); 
        } 
        public void SurfaceChanged(ISurfaceHolder holder, [GeneratedEnum] Format format, int width, int height) 
        { 
         // If your preview can change or rotate, take care of those events here. 
         // Make sure to stop the preview before resizing or reformatting it. 
    
         if (Holder.Surface == null) 
         { 
          // preview surface does not exist 
          return; 
         } 
    
         // stop preview before making changes 
         try 
         { 
          mCamera.StopPreview(); 
         } 
         catch (Exception e) 
         { 
          // ignore: tried to stop a non-existent preview 
         } 
    
         // set preview size and make any resize, rotate or 
         // reformatting changes here 
    
         // start preview with new settings 
         try 
         { 
          mCamera.SetPreviewDisplay(Holder); 
          mCamera.StartPreview(); 
    
         } 
         catch (Exception e) 
         { 
          //Deal with exception 
         } 
        } 
    
        public void SurfaceCreated(ISurfaceHolder holder) 
        { 
         // The Surface has been created, now tell the camera where to draw the preview. 
         try 
         { 
          mCamera.SetPreviewDisplay(Holder); 
          mCamera.StartPreview(); 
         } 
         catch (IOException e) 
         { 
          e.PrintStackTrace(); 
         } 
        } 
    
        public void SurfaceDestroyed(ISurfaceHolder holder) 
        { 
         // empty. Take care of releasing the Camera preview in your activity. 
        } 
    
    } 
    
  2. カメラにプレビューし、あなたの画像を保持するためにレイアウトを準備します

    <?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:orientation="vertical" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" > 
        <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="250dp"> 
        <FrameLayout 
        android:id="@+id/camera_preview" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:layout_weight="1" 
        /> 
        </LinearLayout> 
        <ImageView 
        android:id="@+id/imgResult" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        /> 
        <Button 
        android:id="@+id/btnClick" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:text="Click Me"/> 
    </LinearLayout> 
    
  3. 活動にCameraPreviewを作成し、絵のコールバックを取るために登録:

    public class MainActivity : Activity,IPictureCallback 
    { 
        bool isCameraOpened; 
        Preview mPreview; 
        Android.Hardware.Camera mCamera; 
        Button btnClick; 
        FrameLayout camera_preview; 
        protected override void OnCreate(Bundle bundle) 
        { 
         base.OnCreate(bundle); 
    
         // Set our view from the "main" layout resource 
         SetContentView (Resource.Layout.Main); 
         btnClick = FindViewById<Button>(Resource.Id.btnClick); 
         camera_preview = FindViewById<FrameLayout>(Resource.Id.camera_preview); 
         mCamera = GetCameraInstance(); 
         mCamera.SetDisplayOrientation(90); 
         mPreview = new Preview(this, mCamera); 
         camera_preview.AddView(mPreview); 
         btnClick.Click += BtnClick_Click; 
        } 
    
        private bool CheckCameraHardware() 
        { 
         if (this.PackageManager.HasSystemFeature(Android.Content.PM.PackageManager.FeatureCamera)) 
         { 
          return true; 
         } else 
         { 
          return false; 
         } 
    
        } 
    
    private void BtnClick_Click(object sender, System.EventArgs e) 
    { 
        mCamera.TakePicture(null, null, this); 
    } 
    
        private Android.Hardware.Camera GetCameraInstance() 
        { 
         Android.Hardware.Camera c=null; 
         try 
         { 
          c = Android.Hardware.Camera.Open(); 
         } 
         catch (Java.Lang.Exception e) 
         { 
    
         } 
    
         return c; 
        } 
    
        public void OnPictureTaken(byte[] data, Android.Hardware.Camera camera) 
        { 
         Bitmap bitmap=BitmapFactory.DecodeByteArray(data, 0, data.Length); 
         Bitmap resizedBitmap=Bitmap.CreateScaledBitmap(bitmap, 100, 100, true); 
         FindViewById<ImageView>(Resource.Id.imgResult).SetImageBitmap(resizedBitmap); 
         //restart the preview 
         if (mCamera != null) 
         { 
          mCamera.StartPreview(); 
         } 
    
        } 
    } 
    

をカメラのAPIの詳細な使用のために、あなたはCamera APIを参照することができます。

注:<uses-permission android:name="android.permission.CAMERA" /><uses-feature android:name="android.hardware.camera" />からAndroidManifest.xmlを追加することを忘れないでください。

0

「テキスト」をキーとして&という値として格納するためにHashMapを使用しないのはなぜですか? Applicationクラスでインスタンスを作成します。

このHashMapは、onActivityResult()メソッドで使用できます。

+0

少しきれいにできますか?それはどういうふうに機能するのだろうか –

関連する問題