- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个应用程序,作为其中的一部分,我需要在从相机捕获图像或从图库中选取图像后裁剪图像。我的应用程序中有一个抽屉导航,用户可以从中选择一个选项来查看他的图像(相机或图库)。每当他单击其中一个选项时,将调用一个 fragment ,其余部分将在其中完成(调用相机、单击图片、获取数据并将图像设置到 ImageView )。所以,现在我需要为图像添加裁剪功能,并且我使用了在线可用的裁剪库之一,可以找到 here .在我的应用程序中尝试之前,我创建了一个新的 android studio 项目并制作了一个示例应用程序,用户可以在其中通过单击按钮选择相机,然后完成裁剪并将裁剪后的图像设置为屏幕上的 ImageView 。该项目可以找到here .现在,我试图在我的应用程序中实现相同的功能,但它不起作用。来到代码中,我有一个抽屉导航类,然后是一个 fragment 类。在我的 MainDrawerActivity(简要)中:
在菜单选项中:
if (id == R.id.nav_camera) {
Fragment_TouchImageView camFrag = (Fragment_TouchImageView) getSupportFragmentManager().findFragmentById(R.id.imageFragment);
camFrag.startCamera();
}
else if (id == R.id.nav_gallery) {
Fragment_TouchImageView galFrag = (Fragment_TouchImageView) getSupportFragmentManager().findFragmentById(R.id.imageFragment);
galFrag.openGallery();
}
现在,在我的 Fragment_TouchImageView.java( fragment )中:
这是完整的代码:
package com.example.shravan.watershed;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.soundcloud.android.crop.Crop;
import java.io.File;
public class Fragment_TouchImageView extends Fragment {
Uri imageUri;
private TouchImageView myTVF;
static final int REQUEST_IMAGE_CAPTURE = 10;
static final int PICK_IMAGE = 100;
private static Context context;
private static final String TAG = "Arunachala";
public Fragment_TouchImageView() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_fragment__touch_image_view, container, false);
context= getActivity().getApplicationContext();
myTVF = (TouchImageView) v.findViewById(R.id.img);
myTVF.setImageBitmap(null);
return v;
}
public void startCamera() {
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(i, REQUEST_IMAGE_CAPTURE);
}
public void openGallery() {
Intent gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(gallery, PICK_IMAGE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) {
print("Camera requested");
beginCrop(data.getData());
print("Crop called and came to next line");
}
else if (requestCode == PICK_IMAGE && resultCode == Activity.RESULT_OK) {
print("Gallery requested");
beginCrop(data.getData());
print("Crop called and came to next line");
}
else if (requestCode == Crop.REQUEST_CROP) {
print("Crop.REQUEST_CROP called");
handleCrop(resultCode, data);
print("handleCrop called and came to next line");
}
}
private void beginCrop(Uri source) {
print("Crop has begun");
Uri destination = Uri.fromFile(new File(context.getCacheDir(), "cropped"));
Crop.of(source, destination).asSquare().start(getActivity());
print("Crop has ended");
}
private void handleCrop(int resultCode, Intent result) {
print("Came to handleCrop");
if (resultCode == Activity.RESULT_OK) {
print("RESULT OK");
myTVF.setImageURI(Crop.getOutput(result));
} else if (resultCode == Crop.RESULT_ERROR) {
Toast.makeText(getActivity(), Crop.getError(result).getMessage(), Toast.LENGTH_SHORT).show();
}
}
private void print(String s){
Log.d(TAG, s);
}
}
所以,我给出了一系列的 Log 标签来了解流程,这就是问题所在。每当我选择相机或图库时,它都会正确打开,当我捕获图像时,会调用 beginCrop() 并且当我选择所需的裁剪区域并单击“完成”时,它什么也不做。流程不会进入此循环:
else if (requestCode == Crop.REQUEST_CROP) {
print("Crop.REQUEST_CROP called");
handleCrop(resultCode, data);
print("handleCrop called and came to next line");
}
同样的工作在不同的示例应用程序项目中没有任何问题。(它没有 fragment )
请帮我解决这个问题!
最佳答案
几周前我在使用同一个库时遇到了同样的问题,所以问题出在 onActivityResult 及其在 fragment 中使用它时的 requestCode 所以尝试以这种方式调用 Crop.of:
Crop.of(cropInputUri, cropOutputUri).asSquare().start(getContext(), Fragment.this, Crop.REQUEST_CROP);
关于Android:在捕获或从图库中选取后裁剪图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39499624/
在下面的代码中,我想不必添加undefined作为filteredDevice的类型注解。我认为一个被过滤的设备不应该是未定义的,因为我过滤掉了未定义的设备。 但是如果我删除 undefined类型注
我有一个 UIButton,其文本来自服务器。按钮的宽度是固定的。我想要的是,如果按钮的文本超过按钮的宽度,文本应该在按钮内选取框。如果文本适合按钮宽度,则不应有选取框效果。 我点击了一些链接(one
我正在从头开始实现 webgl 选取,并决定走 GLSL 路线,而不是光线相交测试。 所以我将整个场景渲染到一个单独的帧缓冲区中,为每个对象分配一个唯一的颜色,该颜色作为统一变量传递给片段着色器。当场
例如,我有包含多个对象的数组, var arr = ["a", "b", "c", "d"]; 我想要的是从该数组中选取 2 个随机对象,例如“a”和“c”,并将这 2 个对象推送到另一个数组中,例如
我是一名优秀的程序员,十分优秀!