package com.d3.d3xmpp.activites;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.FloatMath;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.TranslateAnimation;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.d3.d3xmpp.R;
public class ShowPicActivitiy extends Activity{
private LinearLayout ll_viewArea;
private LinearLayout.LayoutParams parm;
private ViewArea viewArea;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//ȥ��title
requestWindowFeature(Window.FEATURE_NO_TITLE);
//ȥ��Activity�����״̬��
getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN,
WindowManager.LayoutParams. FLAG_FULLSCREEN);
setContentView(R.layout.acti_show_pic);
ll_viewArea = (LinearLayout) findViewById(R.id.ll_viewArea);
parm = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT);
// parm.gravity = Gravity.CENTER;
viewArea = new ViewArea(ShowPicActivitiy.this,getIntent().getStringExtra("picPath")); //�Զ��岼�ֿؼ���������ʼ��������Զ���imageView
ll_viewArea.addView(viewArea,parm);
ll_viewArea.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
}
//��δ�����Ҫע���������ȥ��title��״̬������������ŵ� setContentView(R.layout.main);����ǰ�档���������仰�����У���Ϊ�������ص������Ǹ���ȫ������ģ��ҵ�i9000����480x800���������ȥ��title��״̬��������Ļص����������ǻص�������Ҫ��λ�á�
//���濴��ViewArea.java�ļ�������������źͳ�ʼ���Զ���imageView�ĵط����������Զ���ImageView�����������ڲ��ƶ����š�
class ViewArea extends FrameLayout{ //ǰ��˵��ViewArea��һ�����֣� �������ﵱȻҪ�̳�һ�������ˡ�LinearLayoutҲ����
private int imgDisplayW;
private int imgDisplayH;
// private int imgW;
// private int imgH;
private TouchView touchView;
private DisplayMetrics dm;
//resIdΪͼƬ��Դid
public ViewArea(Context context,String img) { //�ڶ���������ͼƬ����ԴID����ȻҲ�����ñ�ķ�ʽ��ȡͼƬ
/* dm = new DisplayMetrics();
((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(dm);
imgDisplayW = dm.widthPixels;
imgDisplayH = dm.heightPixels;*/ //���ַ�ʽ��ȡ����Ļ��С������ķ�ʽ�����һ���ģ�����480x800��i9000�ֱ��ʣ�
super(context);
imgDisplayW = ((Activity)context).getWindowManager().getDefaultDisplay().getWidth();//����Ŀ��Ҫ��xml�е�LinearLayout��Сһ�£����Ҫָ����С��xml�� LinearLayout�Ŀ��һ��Ҫ��px���ص�λ����Ϊ����Ŀ�������أ���dp������
imgDisplayH = ((Activity)context).getWindowManager().getDefaultDisplay().getHeight();
touchView = new TouchView(context,imgDisplayW,imgDisplayH);//���������ǵ��Զ���ImageView
// touchView.setImageResource(resId);//�����ǵ��Զ���imageView����Ҫ��ʾ��ͼƬ
// ImgConfig.showImg(img, touchView);
Bitmap bitmap = BitmapFactory.decodeFile(img);
touchView.setImageBitmap(bitmap);
// imgW = img.getWidth();
// imgH = img.getHeight();
//ͼƬ��һ�μ��ؽ������ж�ͼƬ��С�Ӷ�ȷ����һ��ͼƬ����ʾ��ʽ��
// int layout_w = imgW>imgDisplayW?imgDisplayW:imgW;
// int layout_h = imgH>imgDisplayH?imgDisplayH:imgH;
int layout_w = imgDisplayW;
int layout_h = imgDisplayH;
//����Ĵ������ж�ͼƬ��ʼ��ʾ��ʽ�ģ���Ȼ���Ը�������뷨������ʾ���������ǽ�����ڸߵ�ͼƬ���տ���С�ı����Ѹ�ѹ����ǰ������ǿ�ȳ�������Ļ��С���෴������ߴ��ڿ��ҽ�ͼƬ���ո���С�ı����ѿ�ѹ����ǰ������Ǹ߶ȳ�������Ļ��С
// if(imgW>=imgH) {
// layout_h = (int) (imgH*((float)imgDisplayW/imgW));
// }else {
// layout_w = (int) (imgW*((float)imgDisplayH/imgH));
// }
//������Ҫע����ǣ�����FreamLayout����LinearLayout�ĺô��ǣ����ѹ�����ͼƬ����һ���ߴ�����Ļ����ôֻ��ʾ����Ļ�ڵIJ��֣�����ͨ���ƶ����ⲿ������ü���ͼƬ�����������RelativeLayout���֣�ͼƬ��ʼ��������ʾ����Ļ�ڲ��������г�����Ļ���������ͼƬ������ȫռ����Ļ����ô����Ļ��û��ͼƬ�ĵط��϶���ͼƬҲ���ƶ������������鲻̫�ã�������FreamLayout����LinearLayout��
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(layout_w,layout_h);
params.gravity = Gravity.CENTER;
touchView.setLayoutParams(params);//�����Զ���imageView�Ĵ�С��Ҳ���Ǵ�����Χ
this.addView(touchView);
}
}
class TouchView extends ImageView
{
static final int NONE = 0;//��ʾ��ǰû��״̬
static final int DRAG = 1; //��ʾ��ǰ�����ƶ�״̬
static final int ZOOM = 2; //��ʾ��ǰ��������״̬
static final int BIGGER = 3; //��ʾ�Ŵ�ͼƬ
static final int SMALLER = 4; //��ʾ��СͼƬ
private int mode = NONE; //mode���ڱ�ʾ��ǰ����ʲô״̬
private float beforeLenght; //��һ�δ�������ľ���
private float afterLenght; //�ƶ�������ľ���
private float scale = 0.04f; //��������
private int screenW;//��������ͼƬ���ƶ���Χ����ViewArea�ķ�Χ��Ҳ����linearLayout�ķ�Χ��Ҳ������Ļ��λ�������������ؼ����ԣ�
private int screenH;
private int start_x;//��ʼ������
private int start_y;
private int stop_x ;//����������
private int stop_y ;
private TranslateAnimation trans; //�ص�����
public TouchView(Context context,int w,int h)//���ﴫ������w��h����ͼƬ���ƶ���Χ
{
super(context);
this.setPadding(0, 0, 0, 0);
screenW = w;
screenH = h;
}
//��������2��������ľ���
private float spacing(MotionEvent event) {
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return FloatMath.sqrt(x * x + y * y);
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
switch (event.getAction() & MotionEvent.ACTION_MASK) { //MotionEvent.ACTION_MASK ��ʾ��㴥���¼�
case MotionEvent.ACTION_DOWN:
mode = DRAG;
stop_x = (int) event.getRawX();//��ʾ�������Ļ���Ͻ�Ϊԭ�������
stop_y = (int) event.getRawY();//ͬ��
start_x = stop_x - this.getLeft();//��(int) event.getX();һ��,��ʾ����ڵ�ǰ���Widget���ؼ������Ͻǵ����꣬�������������Զ���imageView���Ͻǵ�����.������ǰ�ߣ��������ȫ���϶�������ָ����Χ�ڣ�һ�����ã�
start_y = stop_y - this.getTop();////��(int) event.getY();һ��,this.getTop()��ʾ�䶥������ڸ��ؼ��ľ���
if(event.getPointerCount()==2)
beforeLenght = spacing(event);
break;
case MotionEvent.ACTION_POINTER_DOWN:
if (spacing(event) > 10f) {
mode = ZOOM;
beforeLenght = spacing(event);
}
break;
case MotionEvent.ACTION_UP:
int disX = 0;
int disY = 0;
if(getHeight()<=screenH )//
{
if(this.getTop()<0 )
{
disY = getTop();
//layout(left , top, right,bottom)������ʾ����view��λ�á�
this.layout(this.getLeft(), 0, this.getRight(), 0 + this.getHeight());
}
else if(this.getBottom()>=screenH)
{
disY = getHeight()- screenH+getTop();
this.layout(this.getLeft(), screenH-getHeight(), this.getRight(), screenH);
}
}else{
int Y1 = getTop();
int Y2 = getHeight()- screenH+getTop();
if(Y1>0)
{
disY= Y1;
this.layout(this.getLeft(), 0, this.getRight(), 0 + this.getHeight());
}else if(Y2<0){
disY = Y2;
this.layout(this.getLeft(), screenH-getHeight(), this.getRight(), screenH);
}
}
if(getWidth()<=screenW)
{
if(this.getLeft()<0)
{
disX = getLeft();
this.layout(0, this.getTop(), 0+getWidth(), this.getBottom());
}
else if(this.getRight()>screenW)
{
disX = getWidth()-screenW+getLeft();
this.layout(screenW-getWidth(), this.getTop(), screenW, this.getBottom());
}
}else {
int X1 = getLeft();
int X2 = getWidth()-screenW+getLeft();
if(X1>0) {
disX = X1;
this.layout(0, this.getTop(), 0+getWidth(), this.getBottom());
}else if(X2<0) {
disX = X2;
this.layout(screenW-getWidth(), this.getTop(), screenW, this.getBottom());
}
}
//���ͼƬ���ŵ��������һ��С��100����ô�Զ��Ŵ�ֱ������100.
while(getHeight()<100||getWidth()<100) {
setScale(scale,BIGGER);
}
//����disX��disY��ƫ���������ƶ������ص���λ������ʱ��Ϊ500���롣
if(disX!=0 || disY!=0)
{
trans = new TranslateAnimation(disX, 0, disY, 0);
trans.setDuration(500);
this.startAnimation(trans);
}
mode = NONE;
break;
case MotionEvent.ACTION_POINTER_UP:
mode = NONE;
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
//ִ���϶��¼���ʱ�����ϱ任�Զ���imageView��λ�ôӶ��ﵽ�϶�Ч��
this.setPosition(stop_x - start_x, stop_y - start_y, stop_x + this.getWidth() - start_x, stop_y - start_y + this.getHeight());
stop_x = (int) event.getRawX();
stop_y = (int) event.getRawY();
} else if (mode == ZOOM) {
if(spacing(event)>10f)
{
afterLenght = spacing(event);
float gapLenght = afterLenght - beforeLenght;
if(gapLenght == 0) {
break;
}
//ͼƬ��ȣ�Ҳ�����Զ���imageView���������70�ſ�������
else if(Math.abs(gapLenght)>5f&&getWidth()>70)
{
if(gapLenght>0) {
this.setScale(scale,BIGGER);
}else {
this.setScale(scale,SMALLER);
}
beforeLenght = afterLenght; //��䲻���١�
}
}
}
break;
}
return true;
}
private void setScale(float temp,int flag) {
if(flag==BIGGER) {
//setFrame(left , top, right,bottom)������ʾ�ı䵱ǰview�Ŀ�ܣ�Ҳ���Ǵ�С��
this.setFrame(this.getLeft()-(int)(temp*this.getWidth()),
this.getTop()-(int)(temp*this.getHeight()),
this.getRight()+(int)(temp*this.getWidth()),
this.getBottom()+(int)(temp*this.getHeight()));
}else if(flag==SMALLER){
this.setFrame(this.getLeft()+(int)(temp*this.getWidth()),
this.getTop()+(int)(temp*this.getHeight()),
this.getRight()-(int)(temp*this.getWidth()),
this.getBottom()-(int)(temp*this.getHeight()));
}
}
private void setPosition(int left,int top,int right,int bottom) {
this.layout(left,top,right,bottom);
}
}