【问题标题】:Pass image through intent using URI to another activity使用 URI 通过意图将图像传递给另一个活动
【发布时间】:2016-03-06 15:37:26
【问题描述】:

我是编程初学者。我正在尝试创建 Meme 生成器应用程序。我已经到了在 GridView 中显示一组图像的地步,用户可以单击一个图像,它会将它们带到一个新的活动中,用户可以在其中输入顶部和底部文本。

感谢您根据我的代码提供以下帮助。

  • A) 我正在尝试在位图中转换相对布局(两个 TextView 和一个 ImageView)。代码是否正确?
  • - B) 当用户单击创建按钮时,我想将从相对布局创建的位图发送到 FullImage.java 活动。是个 你认为代码正确吗?
  • - C) 当用户单击创建按钮时,目前我得到“失败的 Binder 事务”。我认为这是因为我正在通过 图片。我试图理解和使用如何传递 URI 但不是
    成功的。我试图在 SO 和其他博客上找到 sn-p 但 不成功。可以给我详细的代码吗? (作为 初学者,不胜感激!)

DetailsActivity.java

package com.jobaka.www.jobaka;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

/**
 * Created by Psp on 2016-03-03.
 */
public class DetailsActivity extends AppCompatActivity {

    EditText etTop, etBottom;
    TextView tvTop, tvBottom;
    Button bCreate;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.details_activity);

        Intent intent = getIntent();
        int id = intent.getIntExtra("id", -1);
        if(id != -1){
            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), id);
            ImageView imageView = (ImageView) findViewById(R.id.image);
            imageView.setImageBitmap(bitmap);
        }else{

        }

        //imageUri = Uri.parse(extras.getString("imageUri"));

        etTop = (EditText) findViewById(R.id.etTop);
        tvTop = (TextView) findViewById(R.id.tvTop);
        etTop.addTextChangedListener(new TextWatcher() {
            public void afterTextChanged(Editable s) {
                tvTop.setText(s.toString());
            }

            public void beforeTextChanged(CharSequence s, int start,int count, int after) {}

            public void onTextChanged(CharSequence s, int start,int before, int count) {}
        });

        etBottom = (EditText) findViewById(R.id.etBottom);
        tvBottom = (TextView) findViewById(R.id.tvBottom);
        etBottom.addTextChangedListener(new TextWatcher() {
            public void afterTextChanged(Editable sb) {
                tvBottom.setText(sb.toString());
            }

            public void beforeTextChanged(CharSequence sb, int start,int count, int after) {}

            public void onTextChanged(CharSequence sb, int start,int before, int count) {}
        });

        bCreate = (Button) findViewById(R.id.bCreate);
        bCreate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                RelativeLayout v = (RelativeLayout)findViewById(R.id.iFrame);
                Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(),
                        Bitmap.Config.ARGB_8888);
                Canvas canvas = new Canvas(bitmap);
                view.draw(canvas);

                Intent sendImage = new Intent(DetailsActivity.this, FullImage.class);
                sendImage.putExtra("pic", bitmap);
                startActivity(sendImage);
            }
        });




    }


}

FullImage.java

package com.jobaka.www.jobaka;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.ImageView;

public class FullImage extends AppCompatActivity {

    ImageView finalimage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_full_image);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        Intent startingIntent = getIntent();
        String whatYouSent = startingIntent.getStringExtra("pic");
        Bitmap bitmap = BitmapFactory.decodeFile("pic");
        finalimage = (ImageView) findViewById(R.id.ivFull);
        finalimage.setImageBitmap(bitmap);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }

}

【问题讨论】:

    标签: android android-intent bitmap uri


    【解决方案1】:

    在您的 FullImageActivity 中,执行此操作以检索位图

       Intent intent = getIntent();
       Bitmap bitmap = (Bitmap) intent.getParcelableExtra("pic"); 
    

    这是因为android中的bitmap类实现了parcelable。 http://developer.android.com/reference/android/graphics/Bitmap.html

    【讨论】:

    • 我删除了以下几行。并添加了你给的东西。当我单击 DeatailsActivity.java 上的创建按钮时,仍然没有任何反应。它应该带我去 FullImage 活动。另外,您可以向我指出使用 uri 传递图像的任何示例吗?这是我认为的第二个问题。感谢您的及时答复。 //String whatYouSent = startingIntent.getStringExtra("pic"); //位图bitmap = BitmapFactory.decodeFile("pic");
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多