我搜索了很多针对与我类似但不相同的问题的解决方案。
我必须显示存储在服务器(互联网)上的jpg文件(作为广告横幅不是全屏)。 我尝试过使用WebView,但是,当屏幕宽度大于图像宽度时,图像看起来比屏幕小。
是否可以使用ImageView而不是WebView? 如果“是”,我如何缩放下载的图像以适应不同的屏幕分辨率?
提前致谢。
此解决方案找到https://stackoverflow.com/a/9288544/2252143:
MainActivity.java:
public class MainActivity extends Activity {
ImageView imgProva = null;
FunzioniUtili Funzioni = new FunzioniUtili();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgProva = (ImageView)findViewById(R.id.imgProva);
// show The Image
new DownloadImageTask((ImageView) findViewById(R.id.imgProva)).execute("http://www.softlive.net/advs/banner_adolfo.jpg");
}
public void onClick(View v) {
startActivity(new Intent(this, MainActivity.class));
finish();
}
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
int DisplayWidth = 0;
DisplayWidth = Funzioni.ScreenWidth (MainActivity.this);
double CardResizeFactor=1.0;
//This is the function that I use to resize... / CardResizer is redundant, I know!
Funzioni.scaleImage(bmImage,(int)(DisplayWidth / CardResizeFactor),0,0);
}
}
@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;
}
}
我的调整大小功能:
/**
* public void scaleImage(ImageView view, int boundBoxInDp)
*
* Resize the given ImageView.
*
* @param view The ImageView.
* @param boundBoxInDp Scaling factor in Dp.
* @param layoutType 0 = RelativeLayout 1 = LinearLayout 2 = TableLayout 3 = TableRow 4 = FrameLayout.
* @param colNumber Column number if the selected layout is TableRow. If other, put 0
*/
public void scaleImage(ImageView view, int boundBoxInDp, int layoutType, int colNumber)
{
// Get the ImageView and its bitmap
Drawable drawing = view.getDrawable();
Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap();
// Get current dimensions
int width = bitmap.getWidth();
int height = bitmap.getHeight();
// Determine how much to scale: the dimension requiring less scaling is
// closer to the its side. This way the image always stays inside your
// bounding box AND either x/y axis touches it.
float xScale = ((float) boundBoxInDp) / width;
float yScale = ((float) boundBoxInDp) / height;
float scale = (xScale <= yScale) ? xScale : yScale;
// Create a matrix for the scaling and add the scaling data
Matrix matrix = new Matrix();
matrix.postScale(scale, scale);
// Create a new bitmap and convert it to a format understood by the ImageView
Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
BitmapDrawable result = new BitmapDrawable(scaledBitmap);
width = scaledBitmap.getWidth();
height = scaledBitmap.getHeight();
// Apply the scaled bitmap
view.setImageDrawable(result);
// Now change ImageView's dimensions to match the scaled image
if(layoutType == 0)
{
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams();
params.width = width;
params.height = height;
view.setLayoutParams(params);
}
else if(layoutType == 1)
{
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view.getLayoutParams();
params.width = width;
params.height = height;
view.setLayoutParams(params);
}
else if(layoutType == 2)
{
TableLayout.LayoutParams params = (TableLayout.LayoutParams) view.getLayoutParams();
params.width = width;
params.height = height;
view.setLayoutParams(params);
}
else if(layoutType == 3)
{
TableRow.LayoutParams params = (TableRow.LayoutParams) view.getLayoutParams();
params.width = width;
params.height = height;
params.column = colNumber;
}
else if(layoutType == 4)
{
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams();
params.width = width;
params.height = height;
view.setLayoutParams(params);
}
}
这是我的Activity_Main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<ImageView
android:id="@+id/imgProva"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:src="@drawable/ic_launcher" />
</RelativeLayout>
答案 0 :(得分:0)
您可以使用css
将图像的宽度设置为100%答案 1 :(得分:0)
我用它来显示png图像。它将拉伸图像以垂直填充屏幕,保持其纵横比。它似乎只适用于API 11+。它在RelativeLayout中。
<ImageView
android:id="@+id/main_imageView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:src="@drawable/img_alchemy2" />
答案 2 :(得分:0)
好的,我找到了解决方案,并且我编辑了添加代码的问题。 感谢。