将按钮值从一个活动发送到另一个活动

时间:2018-06-11 21:18:55

标签: android

我创建了两个活动(MainSecond.java),其中包含我的2个按钮和(SegmentBitmapsLoader.java),其中包含我想要制作的分段模型:当我点击button1时,它将按钮ID发送到(SegmentBitmapsLoader.java)然后使用button2和model2初始化model1和同样的问题:当我尝试使用getIntent()。getStringExtra();在(SegmentBitmapsLoader.java)中,它给了我错误,因为这个类没有扩展Activity我该怎么办?

(适用MainSecond.java)

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


    button1 = (Button) findViewById(R.id.button1);
    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            BackToMain2(view);
        }
    });

    button2 = (Button) findViewById(R.id.button2);
    button2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            BackToMain2(view);

        }

    });
}



 public void BackToMain2(View view) {
    Intent intent2 = new Intent(MainSecond.this, SegmentBitmapsLoader.class);
    intent2.putExtra("name","button1");
    intent2.putExtra("name","button2");
    startActivity(intent2);

}

}

SegmentBitmapsLoader.java

public class SegmentBitmapsLoader extends AbsAsyncDataLoader<List<SegmentBitmap>> {

    private Uri mImageUri;

    public SegmentBitmapsLoader(Context context, Uri imageUri) {
        super(context);

        mImageUri = imageUri;
    }


    @Nullable
    @Override

    public List<SegmentBitmap> loadInBackground() {
        final Context context = getContext();

        if (context == null) {
            return null;
        }

        final Resources res = context.getResources();

        if (res == null) {
            return null;
        }

        if (mImageUri == null) {
            return null;
        }

        final String filePath = FilePickUtils.getPath(context, mImageUri);
        Logger.debug("file to mask: %s", filePath);
        if (TextUtils.isEmpty(filePath)) {
            return null;
        }

        boolean vertical = checkAndReportDimen(filePath);

        final int dw = res.getDimensionPixelSize(
                vertical ? R.dimen.image_width_v : R.dimen.image_width_h);
        final int dh = res.getDimensionPixelSize(
                vertical ? R.dimen.image_height_v : R.dimen.image_height_h);
        Logger.debug("display image dimen: [%d x %d]", dw, dh);

        Bitmap bitmap = decodeBitmapFromFile(filePath, dw, dh);
        if (bitmap == null) {
            return null;
        }

        List<SegmentBitmap> bitmaps = new ArrayList<>();

        bitmaps.add(new SegmentBitmap(R.string.label_original, bitmap));//important note

        final int w = bitmap.getWidth();
        final int h = bitmap.getHeight();
        Logger.debug("decoded file dimen: [%d x %d]", w, h);

        EventBus.getDefault().post(new ImageDimenEvent(mImageUri, w, h));

        float resizeRatio = (float) DeeplabModel.INPUT_SIZE / Math.max(bitmap.getWidth(), bitmap.getHeight());
        float resizeRatio2 = (float) DeeplabModel2.INPUT_SIZE / Math.max(bitmap.getWidth(), bitmap.getHeight());


        int rw = Math.round(w * resizeRatio);
        int rh = Math.round(h * resizeRatio);

        int rw2 = Math.round(w * resizeRatio2);
        int rh2 = Math.round(h * resizeRatio2);

        Logger.debug("resize bitmap: ratio = %f, [%d x %d] -> [%d x %d]",
                resizeRatio, w, h, rw, rh);
        Logger.debug("resize bitmap: ratio = %f, [%d x %d] -> [%d x %d]",
                resizeRatio2, w, h, rw2, rh2);

        Bitmap resized = ImageUtils.tfResizeBilinear(bitmap, rw, rh);
        Bitmap resized2 = ImageUtils.tfResizeBilinear(bitmap, rw2, rh2);


        Bitmap mask = DeeplabModel.segment(resized);
        Bitmap mask2 = DeeplabModel2.segment(resized2);


        if (mask != null) {
            mask = BitmapUtils.scaleBitmap(mask, w, h);
            bitmaps.add(new SegmentBitmap(R.string.label_mask, mask));

            final Bitmap cropped = cropBitmapWithMask(bitmap, mask);
            bitmaps.add(new SegmentBitmap(R.string.label_cropped, cropped));
        } else {
            bitmaps.add(new SegmentBitmap(R.string.label_mask, (Bitmap) null));
            bitmaps.add(new SegmentBitmap(R.string.label_cropped, (Bitmap) null));
        }
    if(mask2 != null){
        mask2 = BitmapUtils.scaleBitmap(mask2, w, h);
        bitmaps.add(new SegmentBitmap(R.string.label_mask, mask2));

        final Bitmap cropped = cropBitmapWithMask(bitmap, mask2);
        bitmaps.add(new SegmentBitmap(R.string.label_cropped, cropped));
    }else {
        bitmaps.add(new SegmentBitmap(R.string.label_mask, (Bitmap)null));
        bitmaps.add(new SegmentBitmap(R.string.label_cropped, (Bitmap)null));
    }

        return bitmaps;


    }


    private boolean checkAndReportDimen(String filePath) {
        if (TextUtils.isEmpty(filePath)) {
            return false;
        }

        // First decode with inJustDecodeBounds=true to check dimensions
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(filePath, options);

        final int width = options.outWidth;
        final int height = options.outHeight;
        Logger.debug("original image dimen: %d x %d", width, height);

        EventBus.getDefault().post(new ImageDimenEvent(mImageUri, width, height));

        return (height > width);
    }


    private Bitmap cropBitmapWithMask(Bitmap original, Bitmap mask) {
        if (original == null
                || mask == null) {
            return null;
        }

        final int w = original.getWidth();
        final int h = original.getHeight();
        if (w <= 0 || h <= 0) {
            return null;
        }

        Bitmap cropped = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);


        Canvas canvas = new Canvas(cropped);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
        canvas.drawBitmap(original, 0, 0, null);
        canvas.drawBitmap(mask, 0, 0, paint);
        paint.setXfermode(null);

        return cropped;
    }

    public static Bitmap decodeBitmapFromFile(String filePath,
                                              int reqWidth,
                                              int reqHeight) {
        if (TextUtils.isEmpty(filePath)) {
            return null;
        }

        // First decode with inJustDecodeBounds=true to check dimensions
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(filePath, options);

        // Calculate inSampleSize
        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeFile(filePath, options);
    }

    public static int calculateInSampleSize(
            BitmapFactory.Options options, int reqWidth, int reqHeight) {
        // Raw height and width of image
        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;

        if (height > reqHeight || width > reqWidth) {

            final int halfHeight = height / 2;
            final int halfWidth = width / 2;

            // Calculate the largest inSampleSize value that is a power of 2 and keeps both
            // height and width larger than the requested height and width.
            while ((halfHeight / inSampleSize) >= reqHeight
                    && (halfWidth / inSampleSize) >= reqWidth) {
                inSampleSize *= 2;
            }
        }

        return inSampleSize;
    }


}

1 个答案:

答案 0 :(得分:0)

您没有发送button ID,如果您愿意,请将方法更改为:

private void backToMain2(int button_id) {
    Intent intent2 = new Intent(MainSecond.this, SegmentBitmapsLoader.class);
    intent2.putExtra("button_id",button_id);
    startActivity(intent2);
}

当您点击button执行此操作时:

button1 = (Button) findViewById(R.id.button1);
    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            backToMain2(R.id.button1);
        }
    });

但我现在知道你为什么要startActivity()SegmentBitMapsLoader它不是ActivitystartActivity(),因为文件说:

  

启动新活动。您不会收到有关活动何时退出的任何信息。此实现将覆盖基本版本,提供有关执行启动的活动的信息。由于这些附加信息,不需要Intent.FLAG_ACTIVITY_NEW_TASK启动标志;如果未指定,则新活动将添加到调用者的任务中。

您必须考虑以其他方式将MainSecond ActivitySegmentBitmapsLoader.class进行通信。

  

当我尝试使用getIntent()。getStringExtra();在(SegmentBitmapsLoader.java)中它给了我错误,因为这个类没有扩展Activity我该怎么办?

您可以在其构造函数中添加button id点击的Button,这样您就可以执行相关操作,例如您可以这样:

SegmentBitmapsLoader segmentBitmapsLoader = new SegmentBitmapsLoader(this,YOUR_URI,YOUR_BUTTON_ID);

然后执行segmentBitmapsLoader.您可以访问其方法。

你的问题很不清楚,所以我尽力了解你的问题并试着指导你。