androidgallery放大
A. 求教android 系统中图库里面那种放大后还可以拖动切换下一张图片的效果是怎么实现的。
好像不可以的...还是双击一下,让图片回复原来的大小,然后滑动屏幕切换图片。
B. android gallery如何动态添加图片 Integer[] images = { R.drawable.1,R.drawable.2} 这是我写死的数组
拍照调用camera.takePicture(shutter, pc1, pc2)方法;
我们可以第3个参数中处理一下。
private PictureCallback pc2 = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
// TODO Auto-generated method stub
// 存储相片-Decode an immutable(不变的) bitmap from the specified byte
// array.
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
FileOutputStream out = null;
try {
out = new FileOutputStream("/sdcard/pic_1.jpg");
BufferedOutputStream bos = new BufferedOutputStream(out);
bitmap.compress(CompressFormat.JPEG, 80, bos);// 压缩图片
bos.flush();
bos.close();
out.close();
iv.setImageBitmap(bitmap);//iv是一个imageView
stopCamera();// 关闭照相机
init();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
C. Android Gallery setSelection和onFling方法的区别
让gallery自动滚动可以通过以下两种方法实现:
一、使用Timer和TimerTask类来完成图片的自动定时滚动:
思路:循环调用Gallery类的onFling()方法。
代码:
<span style="white-space:pre"> </span>task = new TimerTask() {
@Override
public void run() {
/**
* 参数1和2:手指在gallery上的动作
* 参数3和4:x方向和y方向的滚动的速度,-数表示向左滚,+数表示向右
*/
gallery.onFling(null, null, -750, 0);
}
};
timer.schele(task, 1000, 5000);
<span style="font-size:32px;"><strong>
</strong></span>
<span style="font-size:32px;"><strong>方式2:</strong></span>
二、使用Handler消息机制完成
思路:子线程内死循环使用handler每隔多长时间向主线程发送消息,通知gallery改变位置。
代码:
子线程部分:
<span style="white-space:pre"> new Thread(new Runnable() {
<span style="white-space:pre"> </span>int flag = 1;
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>public void run() {
<span style="white-space:pre"> </span>while (isalive) {
<span style="white-space:pre"> </span>//images为装图片的集合
<span style="white-space:pre"> </span>if ((cur_index + 1) == images.size()) {
<span style="white-space:pre"> </span>flag = -1;
<span style="white-space:pre"> </span>} else if (cur_index == 0) {
<span style="white-space:pre"> </span>flag = 1;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>Message msg = handler.obtainMessage(MSG_UPDATE, cur_index,
<span style="white-space:pre"> </span>0);
<span style="white-space:pre"> </span>handler.sendMessage(msg);
<span style="white-space:pre"> </span>try {
<span style="white-space:pre"> </span>Thread.sleep(4000);
<span style="white-space:pre"> </span>} catch (InterruptedException e) {
<span style="white-space:pre"> </span>e.printStackTrace();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>switch (flag) {
<span style="white-space:pre"> </span>case 1:
<span style="white-space:pre"> </span>cur_index++;
<span style="white-space:pre"> </span>break;
<span style="white-space:pre"> </span>case -1:
<span style="white-space:pre"> </span>cur_index--;
<span style="white-space:pre"> </span>break;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}).start();</span>
主线程部分:
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == MSG_UPDATE) {
gallery.setSelection(msg.arg1);
}
}
};