代码之家  ›  专栏  ›  技术社区  ›  user3315948

如何为网格图像提供共享选项

  •  1
  • user3315948  · 技术社区  · 10 年前

    我正在创建一个应用程序,我想在任何社交平台上共享图像。 我成功地使用了一个网格视图,它显示了所有图像,可以在特定的完整图像活动中查看,以显示用户选择的图像。 我想为应用程序添加一个社交共享功能,以获取图像位置并共享到社交平台。

    这是我的 主要活动.java

    package com.jai.desimeme;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.GridView;
    
    public class MainActivity extends Activity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        GridView gridView = (GridView) findViewById(R.id.grid_view);
    
        // Instance of ImageAdapter Class
        gridView.setAdapter(new ImageAdapter(this));
    
        gridView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v,
                    int position, long id) {
    
                // Sending image id to FullScreenActivity
                Intent i = new Intent(getApplicationContext(), FullImageActivity.class);
                // passing array index
                i.putExtra("id", position);
                startActivity(i);
            }
        });
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
    
    
    
    }
    

    用我的 活动_最小.XML

    <?xml version="1.0" encoding="utf-8"?>
    <GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/grid_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="10dp"
    android:gravity="center"
    android:horizontalSpacing="5dp"
    android:numColumns="4"
    android:stretchMode="columnWidth"
    android:verticalSpacing="5dp" >
    
    </GridView>
    

    我用了 完整图像活动.java 对于所选图像的预览//这里我想添加共享链接。

    package com.jai.desimeme;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Environment;
    import android.view.MenuItem;
    import android.widget.ImageView;
    
    @SuppressLint("SdCardPath")
    public class FullImageActivity extends Activity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.full_image);
    
        // get intent data
        Intent i = getIntent();
    
        // Selected image id
        int position = i.getExtras().getInt("id");
        ImageAdapter imageAdapter = new ImageAdapter(this);
    
        ImageView imageView = (ImageView) findViewById(R.id.full_image_view);
        imageView.setImageResource(imageAdapter.mThumbIds[position]);
    }
    
    
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle item selection
            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
            File sd = Environment.getExternalStorageDirectory();
            String fileName = "test.png";
            File dest = new File(sd, fileName);
            try {
                FileOutputStream out;
                out = new FileOutputStream(dest);
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
                out.flush();
                out.close();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            switch (item.getItemId()) {
                case R.id.item:
                    Uri uri = Uri.fromFile(dest);
                    Intent shareIntent = new Intent();
                    shareIntent.setAction(Intent.ACTION_SEND);
                    shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
                    shareIntent.setType("image/jpeg");
                    startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.share)));
                    return true;
                default:
                    return super.onOptionsItemSelected(item);
            }
        }
    
    }
    

    对于上面的代码,我使用了这个 完整图像.xml 活动

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <ImageView
        android:id="@+id/full_image_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
    <ImageView android:id="@+id/full_image_view" 
    android:layout_width="100dp" android:layout_height="100dp"
    android:src="@drawable/image_border"
    style="@style/myImageView" />
    </LinearLayout>
    

    在这里我创造了 图像适配器.java 以存储图像文件。

    package com.jai.desimeme;
    
    import android.content.Context;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.GridView;
    import android.widget.ImageView;
    
    public class ImageAdapter extends BaseAdapter {
    private Context mContext;
    
    // Keep all Images in array
    public Integer[] mThumbIds = {
    
            R.drawable.rage_0001,
            ...
            R.drawable.rage_178,
    
    
    
    };
    
    // Constructor
    public ImageAdapter(Context c){
        mContext = c;
    }
    
    @Override
    public int getCount() {
        return mThumbIds.length;
    }
    
    @Override
    public Object getItem(int position) {
        return mThumbIds[position];
    }
    
    @Override
    public long getItemId(int position) {
        return 0;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView = new ImageView(mContext);
        imageView.setImageResource(mThumbIds[position]);
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setLayoutParams(new GridView.LayoutParams(70, 70));
        return imageView;
    }
    
    }
    

    这是我的 AndroidManifest.XML

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.jai.desimeme"
    android:versionCode="1"
    android:versionName="1.1.3" android:installLocation="auto">
    
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.INTERNET"/>
    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" android:permission="android.permission.WRITE_EXTERNAL_STORAGE">
        <activity
            android:name="com.jai.desimeme.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND_MULTIPLE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
        </activity>
        <!-- FullImageActivity -->
        <activity android:name=".FullImageActivity"></activity>
        <activity android:name=".About" android:theme="@android:style/Theme.Dialog">  </activity>
    </application>
    

    指导我如何向这个应用程序添加共享链接,我尝试了很多方法,但最终都失败了。

    1 回复  |  直到 10 年前
        1
  •  4
  •   Piyush Divyang Patel    10 年前

    您可以在UI元素的任何单击事件上使用此选项。

    BitmapDrawable bm = (BitmapDrawable) yourImageView.getDrawable();
    Bitmap mysharebmp = bm.getBitmap();
    String path = Images.Media.insertImage(getContentResolver(),
                        mysharebmp, "MyImage", null);
    Uri uri = Uri.parse(path);
    Intent sharingIntent = new Intent(Intent.ACTION_SEND);
    sharingIntent.setType("image/png");
    sharingIntent.putExtra(Intent.EXTRA_STREAM, uri);
    startActivity(Intent.createChooser(sharingIntent,
                        "Share image using"));