如何使用view pager分享图像

时间:2015-02-27 15:19:33

标签: android android-viewpager shareactionprovider

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 我怎么能得到图像ID分享。因为viewpager不支持onclickitemlistener属性。请建议我如何获得图像ID到dhare

4 个答案:

答案 0 :(得分:0)

如果您实施FragmentStatePagerAdapterViewPager的每个页面都可以托管您设计Fragment的实例,其布局以XML格式定义。这将允许您包含构建自定义共享UI所需的View

来自Creating Swipe Views with Tabs | Android Developers

  

FragmentStatePagerAdapter

     

这最适合在未确定页数的对象集合中进行分页。它会在用户导航到其他页面时销毁片段,从而最大限度地减少内存使用。

     

例如,以下是您使用FragmentStatePagerAdapterFragment个对象集合中滑动的方式:

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;
    }
}

答案 1 :(得分:0)

在您的情况下,您可以更改每个页面选定事件的共享意图,如下所示:

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);
    }
}

答案 2 :(得分:0)

  

如何让图片ID分享。?

使用ViewPager.getCurrentItem()从ViewPager获取当前图片ID:

1。ELImageAdapter课程中创建一个方法,以获取当前所选的图片ID:

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

2。使用getImageId方法中的适配器对象调用onCreateOptionsMenu方法:

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

现在使用currentImgId id分享所选图片。

答案 3 :(得分:0)

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:"));

如果适配器是CustomAdapterviewpager创建网页的对象,myPagerViewPager enter code here的引用变量,而图像是存储图像路径的arraylist。