最近作图片的显示,遇到了些问题,简单总结


1)可以用ImageSwicher和ImageView结合在来做,这样会用到setFectory(),华而不实

最要命的是如果图片的大小超过屏幕,实现比较困难,目前是没有找到方法


2) 最简单的方法是用ImageView,图片直接FIT_CENTER,android会根据图片的大小自动调节

保持图片的比例。如果图片分辨率超过屏幕,android也会自动的调整到屏幕能放下整张的图片

在放大图片的时候,可以用ImageView的SetFrame() 和setScale()方法,可以把图片放大

到超过屏幕,原理就是ImageView放大,图片跟着放大。同时也是可以添加各种animation.

大致如下:

Animation animation = AnimationUtils.loadAnimation(Main.this, R.anim.my_scale_action);
imageView.setLayoutParams(new Gallery.LayoutParams(206, 206));
imageView.startAnimation(animation);

写一个自己的MyImageView类,代码如下,可以直接用,特别感谢

http://blog.csdn.net/ldj299/article/details/6422547


package com.practice.imageviewpic; import android.app.Activity;  import android.content.Context;  import android.graphics.*;  import android.graphics.drawable.BitmapDrawable;  import android.os.Bundle;  import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;  import android.view.View;import android.view.ViewGroup.LayoutParams;import android.widget.Button;import android.widget.ImageView;  import android.widget.ImageView.ScaleType;  import android.widget.LinearLayout;    //创建一个自己的ImageView类      class MyImageView extends ImageView {          private float scale = 0.1f;                  //两点触屏后之间的长度          private float beforeLenght;          private float afterLenght;                    //单点移动的前后坐标值          private float afterX,afterY;          private float beforeX,beforeY;                  public MyImageView(Context context) {              super(context);          }          public MyImageView(Context context, AttributeSet attrs) {          this(context, attrs, 0);                    }         public MyImageView(Context context, AttributeSet attrs, int defStyle) {            super(context, attrs, defStyle);        }        //用来设置ImageView的位置          private void setLocation(int x,int y) {              this.setFrame(this.getLeft()+x, this.getTop()+y, this.getRight()+x, this.getBottom()+y);          }                              /*          * 用来放大缩小ImageView          * 因为图片是填充ImageView的,所以也就有放大缩小图片的效果          * flag为0是放大图片,为1是小于图片          */          public void setScale(float temp,int flag) {                            if(flag==0) {                  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 {                  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()));              }          }                    //绘制边框                 @Override            protected void onDraw(Canvas canvas) {                super.onDraw(canvas);                    Rect rec=canvas.getClipBounds();                rec.left++;              rec.top++;              rec.bottom--;                rec.right--;                Paint paint=new Paint();                paint.setColor(Color.RED);                paint.setStyle(Paint.Style.STROKE);                canvas.drawRect(rec, paint);            }                               /* 让图片跟随手指触屏的位置移动          * beforeX、Y是用来保存前一位置的坐标          * afterX、Y是用来保存当前位置的坐标          * 它们的差值就是ImageView各坐标的增加或减少值          */          public void moveWithFinger(MotionEvent event) {                            switch(event.getAction()) {                            case MotionEvent.ACTION_DOWN:              //Log.d(TAG, "down ..");                beforeX = event.getX();                  beforeY = event.getY();                  break;              case MotionEvent.ACTION_MOVE:                          //Log.d(TAG, "move ..");                afterX = event.getX();                  afterY = event.getY();                                    this.setLocation((int)(afterX-beforeX),(int)(afterY-beforeY));                                    beforeX = afterX;                  beforeY = afterY;                  break;                                case MotionEvent.ACTION_UP:              //Log.d(TAG, "up ..");                break;              }          }                    /*          * 通过多点触屏放大或缩小图像          * beforeLenght用来保存前一时间两点之间的距离          * afterLenght用来保存当前时间两点之间的距离          */          public void scaleWithFinger(MotionEvent event) {              float moveX = event.getX(1) - event.getX(0);              float moveY = event.getY(1) - event.getY(0);                            switch(event.getAction()) {              case MotionEvent.ACTION_DOWN:                  beforeLenght = (float) Math.sqrt( (moveX*moveX) + (moveY*moveY) );                  break;              case MotionEvent.ACTION_MOVE:                  //得到两个点之间的长度                  afterLenght = (float) Math.sqrt( (moveX*moveX) + (moveY*moveY) );                                    float gapLenght = afterLenght - beforeLenght;                                    if(gapLenght == 0) {                      break;                  }                                    //如果当前时间两点距离大于前一时间两点距离,则传0,否则传1                  if(gapLenght>0) {                      this.setScale(scale,0);                  }else {                      this.setScale(scale,1);                  }                                    beforeLenght = afterLenght;                  break;              }          }            //这里来监听屏幕触控时间     @Override      public boolean onTouchEvent(MotionEvent event) {                  /*         * 判定用户是否触摸到了图片         * 如果是单点触摸则调用控制图片移动的方法         * 如果是2点触控则调用控制图片大小的方法         */          if(event.getY() > this.getTop() && event.getY() < this.getBottom()                  && event.getX() > this.getLeft() && event.getX() < this.getRight()) {              if(event.getPointerCount() == 2) {              this.scaleWithFinger(event);              }else if(event.getPointerCount() == 1) {              this.moveWithFinger(event);              }                     }          return true;      }               }



更多相关文章

  1. Android实现宫格图片连续滑动效果
  2. Android之UI学习篇六:ImageView实现图片旋转和缩放
  3. 快速开发框架Afinal的使用(数据库操作,HTTP请求,网络图片加载,控件绑
  4. Android bitmap图片处理
  5. Android 中,应用程序需要的图片资源如何针对不同屏幕大小手机设计

随机推荐

  1. Android调用系统, 任意比例裁剪图片
  2. Android 之ActivityThead、ActivityManag
  3. 获取Android设备上的详细的摄像头信息
  4. ListView setOnItemClickListener无效原
  5. Android笔记二十三.Android基于事件监听
  6. Bitmap and DrawPoint
  7. Android笔试(一)
  8. Android 学习笔记1:基本架构
  9. Android开发入门教程1-初试Android
  10. js判断浏览器所在的客户端类型