Android UI控件五
一、ImageView显示图像控件
ImageView主要是用来显示图片的控件,可以对图片进行放大、缩小和旋转的功能。
Android:scaleType属性指定ImageView控件显示图片的方式,例如:center表示图像以不缩放的方式显示在ImageView控件的中心,如果设置为fitCenter,表示图像按照比例缩放至合适的位置,并在ImageView控件的中心。
1.ImageView控件的基本用法
public class MainActivity extends Activity {
private ImageView imageView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imageView = (ImageView) findViewById(R.id.imageview01);
// 设置第一张图片的比例大小
imageView.setLayoutParams(new LinearLayout.LayoutParams(50, 50));
setTitle("height=" + imageView.getLayoutParams().height + ">>width="
+ imageView.getLayoutParams().width);
}
}
<LinearLayout 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"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="scaleType:center为不缩放显示在ImageView控件中心" />
<ImageView
android:id="@+id/imageview01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="center"
android:src="@drawable/bg" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="scaleType:fitcenter按比例缩放显示在ImageView控件中心" />
<ImageView
android:id="@+id/imageview01"
android:layout_width="200dp"
android:layout_height="200dp"
android:background="#000"
android:padding="20dp"
android:scaleType="fitCenter"
android:src="@drawable/bg" />
</LinearLayout>
2.ImageView实现试屏和裁剪图片的功能
public class MainActivity extends Activity implements OnClickListener {
private Button selectImageBtn, cutImageBtn;
private ImageView imageView;
private static final int SELECT_CODE = 1;
private static final int CUT_CODE = 2;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
selectImageBtn = (Button) findViewById(R.id.selectbutton);
cutImageBtn = (Button) findViewById(R.id.cutbutton);
imageView = (ImageView) findViewById(R.id.imageview);
imageView.setBackgroundColor(Color.BLACK);
selectImageBtn.setOnClickListener(this);
cutImageBtn.setOnClickListener(this);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
// 处理图片按照手机的屏幕大小实现
if (requestCode == SELECT_CODE) {
Uri uri = data.getData();// 获得图片的路径
int dw = getWindowManager().getDefaultDisplay().getWidth();
int dh = getWindowManager().getDefaultDisplay().getHeight() / 2;
try {
// 实现对图片裁剪的类,是一个匿名内部类
BitmapFactory.Options factory = new BitmapFactory.Options();
factory.inJustDecodeBounds = true;// 如果设置为true,允许查询图片不是按照像素分配给内存
Bitmap bitmap = BitmapFactory.decodeStream(
getContentResolver().openInputStream(uri), null,
factory);
// 对图片宽高进行匹配
int hRatio = (int) Math
.ceil(factory.outHeight / (float) dh);
// 如果结果大于1,说明图片的高度大于手机屏幕的高度
int wRatio = (int) Math
.ceil(factory.outHeight / (float) dw);
// 如果结果大于1,说明图片的宽度大于手机屏幕的宽度
// 缩放到1/radio的尺寸和 radia^2像素
if (hRatio > 1 || wRatio > 1) {
if (hRatio > wRatio) {
factory.inSampleSize = hRatio;
} else {
factory.inSampleSize = wRatio;
}
}
factory.inJustDecodeBounds = false;
// 实用化BitmapFactory对图片进行试屏的操作
bitmap = BitmapFactory.decodeStream(getContentResolver()
.openInputStream(uri), null, factory);
imageView.setImageBitmap(bitmap);
} catch (Exception e) {
e.printStackTrace();
}
} else if (requestCode == CUT_CODE) {
Bitmap bitmap = data.getParcelableExtra("data");
imageView.setImageBitmap(bitmap);
}
}
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.selectbutton:
// 如何提取手机的图片,并且进行选择图片的功能
Intent intent1 = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);// 打开手机图片库
startActivityForResult(intent1, SELECT_CODE);
break;
case R.id.cutbutton:
Intent intent2 = getIamgeClipIntent();
startActivityForResult(intent2, CUT_CODE);
break;
}
}
private Intent getIamgeClipIntent() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
// 实现对图片的裁剪,必须设置图片的属性和大小
intent.setType("image/*");// 获取任意的图片类型
intent.putExtra("crop", "true");// 滑动选中图片
intent.putExtra("aspectX", 1);// 剪切框的比例
intent.putExtra("aspectY", 1);// 剪切框的比例
intent.putExtra("outputX", 80);// 指定输出图片的大小
intent.putExtra("outputY", 80);
intent.putExtra("return-data", true);
return intent;
}
}
<LinearLayout 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"
android:orientation="vertical" >
<Button
android:id="@+id/selectbutton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="SelectImage" />
<Button
android:id="@+id/cutbutton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="CutImage" />
<ImageView
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
实现图像的缩放:改变ImagView控件的大小,将<ImageView>标签的android:scaleType的属性设置为fitCenter,要想实现图像的旋转可以使用android.graphics.Matirx类的setRotate来实现。
public class MainActivity extends Activity implements OnSeekBarChangeListener {
private int minWidth = 80;
private TextView tv1, tv2;
private ImageView imageView;
private SeekBar seekBar1, seekBar2;
private Matrix matrix = new Matrix();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv1 = (TextView) findViewById(R.id.textview01);
tv2 = (TextView) findViewById(R.id.textview02);
imageView = (ImageView) findViewById(R.id.imageview01);
seekBar1 = (SeekBar) findViewById(R.id.seekbar01);
seekBar2 = (SeekBar) findViewById(R.id.seekbar02);
seekBar1.setOnSeekBarChangeListener(this);
seekBar2.setOnSeekBarChangeListener(this);
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
seekBar1.setMax(displayMetrics.widthPixels - minWidth);
}
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if (seekBar.getId() == R.id.seekbar01) {
int width = minWidth + progress;
int height = (int) (width * 3 / 4.0);
imageView.setLayoutParams(new LinearLayout.LayoutParams(width,
height));
tv1.setText("宽度:" + width + "dp,高度:" + height + "dp");
} else if (seekBar.getId() == R.id.seekbar02) {
Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(
R.drawable.bg)).getBitmap();
matrix.setRotate(progress);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
imageView.setImageBitmap(bitmap);
tv2.setText("旋转" + progress + "度");
}
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onStopTrackingTouch(SeekBar seekBar) {
}
}
<LinearLayout 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"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageview01"
android:layout_width="200dp"
android:layout_height="150dp"
android:scaleType="fitCenter"
android:src="@drawable/bg" />
<TextView
android:id="@+id/textview01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="宽度:200dp,高度:150dp" />
<SeekBar
android:id="@+id/seekbar01"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:max="240"
android:progress="120" />
<TextView
android:id="@+id/textview02"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="旋转0度" />
<SeekBar
android:id="@+id/seekbar02"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:max="360"
android:progress="0" />
</LinearLayout>
4.ImageView从网络上获取图像
public class MainActivity extends Activity {
private Button btn;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button) findViewById(R.id.button);
imageView = (ImageView) findViewById(R.id.imageview);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
/*InputStream inputStream = HttpUtils.getImageInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
imageView.setImageBitmap(bitmap);*/
byte[] data = HttpUtils.getImageArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
imageView.setImageBitmap(bitmap);
} catch(Exception e) {
e.printStackTrace();
}
}
});
}
}
HttpUtils类
public class HttpUtils {
//访问的图片地址
private static final String path = "http://192.168.137.98:8080/web/101.jpg";
/**
* 以字节流的形式返回
*
* @return
* @throws Exception
*/
public static InputStream getImageInputStream() throws Exception {
InputStream inputStream = null;
URL url = new URL(path);
if (url != null) {
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
conn.setDoInput(true);
if (conn.getResponseCode() == 200) {
inputStream = conn.getInputStream();
}
}
return inputStream;
}
/**
* 以字节数组的形式返回
*/
public static byte[] getImageArray() throws Exception {
byte[] data = null;
InputStream inputStream = null;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
URL url = new URL(path);
if (url != null) {
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
conn.setDoInput(true);
byte[] buffer = new byte[1024];
int len = 0;
if (conn.getResponseCode() == 200) {
inputStream = conn.getInputStream();
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
data = outputStream.toByteArray();
}
inputStream.close();
}
return data;
}
}
<LinearLayout 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"
android:orientation="vertical" >
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="从网络上获取图片" />
<ImageView
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>