图片传值(Intene+ImageLoader)+缩放、拖拽(PhotoView)

来源:互联网 发布:金庸对悟空传评价知乎 编辑:程序博客网 时间:2024/06/05 04:11

//子条目的点击监听

xLV.setOnItemClickListener(new AdapterView.OnItemClickListener() {    @Override    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {        Intent intent = new Intent(getActivity(), SeondActivity.class);        intent.putExtra("image",results.get(position-1).getThumbnail_pic_s());        startActivity(intent);    }});
//导一个jar包  photoView 1.2.4  compile 'com.github.chrisbanes.photoview:library:1.2.4'

//SecondActivity布局文件

<uk.co.senab.photoview.PhotoView    android:id="@+id/sec_photoView"    android:layout_width="300dp"    android:layout_height="200dp" />
//SecondActivity中

public class SeondActivity extends AppCompatActivity{//    private ImageView imageView;    private PhotoView sec_photoView;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.second);//        imageView = (ImageView) findViewById(R.id.sec_image);        sec_photoView = (PhotoView) findViewById(R.id.sec_photoView);        Intent intent = getIntent();        //path  路径        String image = intent.getStringExtra("image");        //自定义配置                DisplayImageOptions options = new DisplayImageOptions.Builder()                        .cacheInMemory(true)//让图片进行内存缓存                        .cacheOnDisk(true)//让图片进行sdcard缓存//                        .showImageForEmptyUri(R.mipmap.ic_empty)//图片地址有误//                        .showImageOnFail(R.mipmap.ic_error)//当图片加载出现错误的时候显示的图片//                        .showImageOnLoading(R.mipmap.loading)//图片正在加载的时候显示的图片                        .build();                //ImageLoader.getInstance().loadImage(path,options,new Ima);//加载图片                //参数1:加载的图片地址                //参数2:将图片设置到那个图片控件上面                //参数3:加载图片配置选项,意思是指明对这张图片的是否进行缓存(内存、sdcard)                ImageLoader.getInstance().displayImage(image, sec_photoView, options);    }    /**     * 事件分发的方法 ,需要activty把事件传给photoview ,photoview才能接受到我们的触摸事件     */    @Override    public boolean dispatchTouchEvent(MotionEvent ev) {        //activity接受到事件分发之后,我们手动处理触摸事件,只给传给我们自己的onTouchEvent方法;        onTouchEvent(ev);        return true;    }    //手指按下的坐标    float downX;    float downY;    //手指移动前的坐标    float lastX;    float lastY;    boolean moveble = false;    boolean isMorePoint = false;    @Override    public boolean onTouchEvent(MotionEvent event) {        super.onTouchEvent(event);        //接受多指触控需要用 event.getAction() & MotionEvent.ACTION_MASK 来获得当前的触摸事件        switch (event.getAction() & MotionEvent.ACTION_MASK) {            case MotionEvent.ACTION_DOWN:                downX = event.getX();                downY = event.getY();                lastX = downX;                lastY = downY;                if (downX > sec_photoView.getX()                        && downX < sec_photoView.getX() + sec_photoView.getWidth()                        && downY > sec_photoView.getY()                        && downY < sec_photoView.getY() + sec_photoView.getHeight()                        ) {                    moveble = true;                } else {                    moveble = false;                }                break;            case MotionEvent.ACTION_MOVE:                //当前手指摸出的坐标                float currentX = event.getX();                float currentY = event.getY();                //我手指移动的距离                float gapX = currentX - lastX;                float gapY = currentY - lastY;                //  如果点击位置不在图片上的话不做任何逻辑处理  moveble ==true 的时候做处理                if (moveble) {                    if (isMorePoint) {                        //多指的时候 把事件交给photoview去处理 ,它自己会根据事件去做放大缩小的逻辑 ,                        sec_photoView.dispatchTouchEvent(event);                    } else {                        //单指的时候  拖拽的逻辑  设置图片新的位置    ==    原来的位置 + 手指移动的距离                        sec_photoView.setX(sec_photoView.getX() + gapX);                        sec_photoView.setY(sec_photoView.getY() + gapY);                    }                }                lastX = event.getX();                lastY = event.getY();                break;            case MotionEvent.ACTION_UP:                break;            //除了第一个手指之外别的手指按下时触发            case MotionEvent.ACTION_POINTER_DOWN:                isMorePoint = true;                break;            //除了第一个手指之外别的手指抬起时触发            case MotionEvent.ACTION_POINTER_UP:                isMorePoint = false;                break;        }        return true;    }}