2017-02-13 33 views
0

Как код для совместного использования текущего изображения, которое находится в поле зрения (в изображенииSwitcher) из галереи. У меня есть приложение, в котором есть несколько изображений в галерее, которые после выбора затем загружаются в imageSwitcher. Итак, теперь я хочу поделиться просмотренным и отправленным изображением, используя раскрывающееся меню «Совместное использование».Как обмениваться имиджем ImageSwitcher в android

Это мой код: TextView drawableId; TextView stringCopy;

int imgs[] = 
      { 
        R.drawable.pg1, 
        R.drawable.pg2, 

      }; 
    String imgs1[] = 
     { 
       "R.drawable.pg1", 
       "R.drawable.pg2", 
     }; 
    int imgs2[] = 
      { 
        R.drawable.infinity_96_58uvb_pg1, 
        R.drawable.infinity_96_58uvb_pg2, 

      }; 

    ImageSwitcher imgSwitcher, imageSwitcher2; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.activity_main); 
    drawableId = (TextView) findViewById(R.id.textView); 
    stringCopy = (TextView) findViewById(R.id.textView2); 

    imgSwitcher = (ImageSwitcher) findViewById(imageSwitcher1); 
    imgSwitcher.setFactory(this); 

    final Gallery gallery = (Gallery) findViewById(R.id.gallery1); 
    gallery.setAdapter(new MainActivity.ImageAdapter(this)); 

    gallery.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     public void onItemClick(AdapterView<?> parent, View v, int position, 
           long id) { 
      imgSwitcher.setImageResource(imgs2[position]); 
      drawableId.setText(imgs1[position]+""); 
      Toast.makeText(MainActivity.this, imgSwitcher + "", Toast.LENGTH_LONG).show(); 
      imgSwitcher.setVisibility(View.VISIBLE); 
     } 
    }); 
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View view) { 
      postPicture(); 
     } 

     public boolean postPicture() { 
      String a = drawableId.getText().toString(); 
      stringCopy.setText(a); 

      Bitmap b = BitmapFactory.decodeFile(a); 
      Intent share = new Intent(Intent.ACTION_SEND); 
      share.setType("image/*"); 
      ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
      b.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
      File f = new File(Environment.getExternalStorageDirectory() + File.separator + "temporary_file.jpg"); 
      try { 
       f.createNewFile(); 
       FileOutputStream fo = new FileOutputStream(f); 
       fo.write(bytes.toByteArray()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      share.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/temporary_file.jpg")); 
      startActivity(Intent.createChooser(share, "Share image File")); 

      Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_LONG).show(); 
      return true; 
     } 

     }); 



    } 

И вот моя ошибка:

E/BitmapFactory: Невозможно декодировать поток: java.io.FileNotFoundException: R.drawable.pg1: не открыть не удалось: ENOENT (Нет такого файла или каталога) D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.mt_br.floatingactionbutton, PID: 13647 java.lang.NullPointerException: попытка вызвать виртуальный метод 'boolean android.graphics.Bitmap. compress (android.graphics.Bitmap $ CompressFormat, int, java.io.OutputStream) 'на ссылке нулевого объекта в com.example.mt_br.floatingactionbutton.MainActivity $ 2.postPicture (MainActivity.java:112) в com.example.mt_br.floatingactionbutton.MainActivity $ 2.onClick (MainActivity.java:101)

ответ

0

я заменял это:

 public boolean postPicture() { 

      int Position = gallery.getSelectedItemPosition(); 
      Bitmap b = BitmapFactory.decodeResource(getResources(), imgs2[Position]);