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

//子条目的点击监听

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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值