Как делиться изображениями, используя вид пейджер

public class EyeLinerActivity extends Activity {
        int position;
        private ShareActionProvider provider;
        ELImageAdapter adapter;
            @Override
            public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_eyeliner);

            //ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
            //adapter = new ELImageAdapter(this);
            //viewPager.setAdapter(adapter);
            //ViewPager.setCurrentItem(0);
             ViewPager  pager = (ViewPager) findViewById(R.id.view_pager);
             adapter = new ELImageAdapter(this);
              pager.setAdapter(new ELImageAdapter(this));
    //        ImageView imageView = new ImageView(context);
    //      imageView.setImageResource(GalImages[position]);
    //        if (pager.getAdapter() != null)
    //        pager.setAdapter(adapter);
    //        pager.setCurrentItem(position);
            }
            @SuppressLint("NewApi")
            @Override
            public boolean onCreateOptionsMenu(Menu menu) {
                getMenuInflater().inflate(R.menu.main, menu);
                MenuItem shareitem= (MenuItem)menu.findItem(R.id.action_share);
                ShareActionProvider provider = (ShareActionProvider)shareitem.getActionProvider();  
                Bitmap bitmap;
                OutputStream output;
                //ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
                bitmap = BitmapFactory.decodeResource(getResources(),adapter.GalImages[position]); 
                File filepath = Environment.getExternalStorageDirectory();
                File dir = new File(filepath.getAbsolutePath() + "/Eye Liner/");
                dir.mkdirs();
                File file = new File(dir, "Image.png"); 
                try {
                Intent share = new Intent(Intent.ACTION_SEND);
                share.setAction(Intent.ACTION_SEND);
                share.setType("image/jpeg");
                output = new FileOutputStream(file);
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
                output.flush();
                output.close();
                Uri uri = Uri.fromFile(file);

                share.putExtra(Intent.EXTRA_STREAM, uri);
                 provider.setShareIntent(share);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    }
                 return true;
                    }

                //return super.onCreateOptionsMenu(menu);

             private void setShareIntent(Intent intent) {
                    if (provider != null) {
                        provider.setShareIntent(intent);
                    }
                }
        }

adapter.java

public class ELImageAdapter  extends PagerAdapter {
    Context context;
    public int[] GalImages = new int[] {
             R.drawable.l_1,
                R.drawable.l_2,
                R.drawable.l_3,
                R.drawable.l_4,
                R.drawable.l_5,
                R.drawable.l_6,
                R.drawable.l_7,
                R.drawable.l_8,
                R.drawable.l_9,
                R.drawable.l_10,
                R.drawable.l_11,
                R.drawable.l_12,
                R.drawable.l_13,
                R.drawable.l_14,
                R.drawable.l_15,
                R.drawable.l_16,
                R.drawable.l_17

    };
    ELImageAdapter(Context context){
    this.context=context;
    }
    @Override
    public int getCount() {
    return GalImages.length;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
    return view == ((ImageView) object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
    ImageView imageView = new ImageView(context);
    int padding = context.getResources().getDimensionPixelSize(R.dimen.activity_horizontal_margin);
    imageView.setPadding(padding, padding, padding, padding);
    imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
    imageView.setImageResource(GalImages[position]);
    ((ViewPager) container).addView(imageView, 0);
    return imageView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
    ((ViewPager) container).removeView((ImageView) object);
    }
    }

я хочу поделиться изображениями.. и я использую viewpager как я могу получить идентификаторы изображений для обмена.? так как viewpager не поддерживает свойство onclickitemlistener. пожалуйста, предложите, как я могу получить идентификатор изображения, чтобы поделиться

4 ответа

Если вы реализуете FragmentStatePagerAdapter, каждая страница вашего ViewPager может разместить экземпляр Fragment вашего дизайна, с его макетом, определенным в XML. Это позволит вам включить все View s вы должны составить свой пользовательский интерфейс обмена.

Из создания видов смахивания с вкладками | Разработчики Android:

FragmentStatePagerAdapter

Это лучше всего подходит для разбиения на страницы в коллекции объектов, для которых количество страниц не определено. Он уничтожает фрагменты при переходе пользователя на другие страницы, сводя к минимуму использование памяти.

Например, вот как вы можете использовать FragmentStatePagerAdapter пролистать коллекцию Fragment объекты:

public class CollectionDemoActivity extends FragmentActivity {
    // When requested, this adapter returns a DemoObjectFragment,
    // representing an object in the collection.
    DemoCollectionPagerAdapter mDemoCollectionPagerAdapter;
    ViewPager mViewPager;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_collection_demo);

        // ViewPager and its adapters use support library
        // fragments, so use getSupportFragmentManager.
        mDemoCollectionPagerAdapter =
                new DemoCollectionPagerAdapter(
                        getSupportFragmentManager());
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mDemoCollectionPagerAdapter);
    }
}

// Since this is an object collection, use a FragmentStatePagerAdapter,
// and NOT a FragmentPagerAdapter.
public class DemoCollectionPagerAdapter extends FragmentStatePagerAdapter {
    public DemoCollectionPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        Fragment fragment = new DemoObjectFragment();
        Bundle args = new Bundle();
        // Our object is just an integer :-P
        args.putInt(DemoObjectFragment.ARG_OBJECT, i + 1);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public int getCount() {
        return 100;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return "OBJECT " + (position + 1);
    }
}

// Instances of this class are fragments representing a single
// object in our collection.
public static class DemoObjectFragment extends Fragment {
    public static final String ARG_OBJECT = "object";

    @Override
    public View onCreateView(LayoutInflater inflater,
            ViewGroup container, Bundle savedInstanceState) {
        // The last two arguments ensure LayoutParams are inflated
        // properly.
        View rootView = inflater.inflate(
                R.layout.fragment_collection_object, container, false);
        Bundle args = getArguments();
        ((TextView) rootView.findViewById(android.R.id.text1)).setText(
                Integer.toString(args.getInt(ARG_OBJECT)));
        return rootView;
    }
}

Как я могу получить идентификаторы изображений для обмена.?

использование ViewPager.getCurrentItem() чтобы получить текущий идентификатор изображения из ViewPager:

1. Создайте метод в ELImageAdapter класс для получения текущего идентификатора выбранного изображения:

public int getImageId(int pos){
   return GalImages[pos];
 }

2. Позвоните getImageId метод с использованием объекта адаптера в onCreateOptionsMenu метод:

 int currentPos=pager.getCurrentItem();
 int currentImgId=adapter.getImageId(currentPos);

Сейчас использую currentImgId идентификатор, чтобы поделиться выбранным изображением.

File file = new File(adapter.images.get(myPager.getCurrentItem()));
Intent mShareIntent = new Intent(Intent.ACTION_SEND);
mShareIntent.setType("image/*");    
mShareIntent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(file));  
startActivity(Intent.createChooser(mShareIntent,"Shareith:"));

Где адаптер является объектом CustomAdapter создание страниц для viewpager, myPager является ссылочной переменной для ViewPagerenter code here и изображения - это хранилище изображений.

В вашем случае вы можете изменить намерение поделиться на каждом выбранном событии страницы, например:

pager.setOnPageChangeListener(new  ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i2) {

        }

        @Override
        public void onPageSelected(int i) {
            setShareIntentForPosition(i);
        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });

private void setShareIntentForPosition(int currentPosition){
    Bitmap bitmap;
    OutputStream output;
    bitmap = BitmapFactory.decodeResource(getResources(),adapter.GalImages[currentPosition]); 
    File filepath = Environment.getExternalStorageDirectory();
    File dir = new File(filepath.getAbsolutePath() + "/Eye Liner/");
    dir.mkdirs();
    File file = new File(dir, "Image.png"); 
    try {
    Intent share = new Intent(Intent.ACTION_SEND);
    share.setAction(Intent.ACTION_SEND);
    share.setType("image/jpeg");
    output = new FileOutputStream(file);
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
    output.flush();
    output.close();
    Uri uri = Uri.fromFile(file);
    share.putExtra(Intent.EXTRA_STREAM, uri);
    setShareIntent(share);
}
private void setShareIntent(Intent intent) {
    if (provider != null) {
           provider.setShareIntent(intent);
    }
}
Другие вопросы по тегам