我正在用另一个项目作为库来构建android项目。 在库项目中,它处理所有创建方法,其他项目引用该库包含自己的资源,如图像。
库项目中有一个imageView,我想要做的是将图像传递给库项目来渲染它,但是,我不能只传递id,因为两个项目都有自己的资源。 我试图在子项目中创建一个Drawable,并传递给父项目,结果是nullpointerexception。
我能想到的是传递位图,但不知道如何使用项目文件夹中的图像创建位图,因为所有资源都是压缩的,我只能使用
context.getResources()
检索资源文件。
还是有其他方法可以做到这一点吗?
更新
很抱歉,NullPointerException是因为我在调用
之前尝试使用imageviewsuper.onCreate();
现在它不会抛出异常并且可以运行,但是imageview仍然无法显示图像。 我的代码:
ImageView imageview = (ImageView) findViewById(library.R.id.imageView1);
imageview.setImageResource(R.drawable.image);
解决方案
事实证明,我在调用
之前尝试在父类中使用imageviewsuper.onCreate()
并且图片无法加载,因为我
setContentView()
涵盖了父级Activity的布局。
您可以使用下面提供的方法将位图或drawable传递给超类中的imageview,
或在子类中创建一个imageview,然后使用libraryPath.R在父类中获取imageview。
答案 0 :(得分:2)
假设您在Activity类中调用它
bm = BitmapFactory.decodeResource(getResources(), R.drawable.image);
第一个参数是Resources,是必需的。它通常可以在任何Context(和Activity之类的子类)中获得。
答案 1 :(得分:0)
将主项目的context
作为方法的参数传递给库项目。
我认为最好将位图传递给库项目而不是上下文或资源。
答案 2 :(得分:0)
您可以拥有任意数量的库项目,但是一旦您编译并运行您的应用程序,它将是一个单一的代码和资源,没有什么可以区分一个类与库项目中的ImageView与您的类中的类带有ImageView的主项目。
发布一些显示此ImageView所在位置的代码。它是什么类,以什么方式使用它?
访问ImageView后,您可以使用以下任何一种方法:
ImageView.setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.image));
ImageView.setImageResource(R.drawable.image);
ImageView.setImageDrawable(getResources().getDrawable(R.drawable.image));
答案 3 :(得分:0)
我也遇到了同样的问题,并且有非常粗鲁的解决方案。 您收到NullPointerException 因为我认为您在Library项目中使用了Switch case
根据Android library project implementation guide,在库项目中使用if-else而不是switch case。
您可以通过单个命令直接将switch case转换为if-else。您可以在下面的文章中查看更多详情。
http://www.tekritisoftware.com/android-library-projects-to-use-common-source-codes
答案 4 :(得分:0)
私有位图imageOriginal,imageScaled;
if(imageOriginal == null){ imageOriginal = BitmapFactory.decodeResource(context.getResources(),drawable_id); }
image.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// method called multiple times but we can initialize just once
if (imageHeight == 0 || imageWidth == 0) {
imageHeight = image.getHeight();
imageWidth = image.getWidth();
// resize the image
Matrix resize = new Matrix();
resize.postScale((float) Math.min(imageWidth, imageHeight) / (float) imageOriginal.getWidth(), (float) Math.min(imageWidth, imageHeight) / (float) imageOriginal.getHeight());
imageScaled = Bitmap.createBitmap(imageOriginal, 0, 0, imageOriginal.getWidth(), imageOriginal.getHeight(), resize, false);
// translate the matrix to the image view's center
float translateX = imageWidth / 2 - imageScaled.getWidth() / 2;
float translateY = imageHeight / 2 - imageScaled.getHeight() / 2;
matrix.postTranslate(translateX, translateY);
image.setImageBitmap(imageScaled);
image.setImageMatrix(matrix);
}
}
});
这会将图像类型更改为位图。我希望它会对你有所帮助。