Andoid_ImageView图片的缩放

本文介绍了一种通过触摸事件实现图像放大和缩小的功能,包括事件监听、手指位置计算和布局参数调整。
public class MainActivity extends Activity {
    private Button local, network;
    private ImageView iv;
    RelativeLayout lay;
    private float now;
    private float last = -1;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init() {
        iv = (ImageView) findViewById(R.id.imageView);
        local = (Button) findViewById(R.id.local);
        network = (Button) findViewById(R.id.network);
        local.setOnClickListener(l);
        network.setOnClickListener(l);
        lay = (RelativeLayout) findViewById(R.id.lay);
        lay.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        Log.d("TAG", "down!!!");
                        break;
                    case MotionEvent.ACTION_MOVE:
                        Log.d("TAG", "move!!!");
                        // 判断按下手指个数
                        if (event.getPointerCount() >= 2) {
                            float x = event.getX(0) - event.getX(1);
                            float y = event.getY(0) - event.getY(1);
                            now = (float) Math.sqrt(x * x + y * y);
                            if (last < 0) {
                                last = now;
                            } else {

                                if (now - last > 5) {
                                    Log.d("TAG", "放大!");
                                    RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) iv
                                            .getLayoutParams();
                                    lp.width = (int) (iv.getWidth() * 1.2);
                                    lp.height = (int) (iv.getHeight() * 1.2);
                                    iv.setLayoutParams(lp);
                                    last = now;
                                } else if (last - now > 5) {
                                    Log.d("TAG", "缩小!");
                                    RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) iv
                                            .getLayoutParams();
                                    lp.width = (int) (iv.getWidth() * 0.8);
                                    lp.height = (int) (iv.getHeight() * 0.8);
                                    if (lp.width > 0.1) {
                                        iv.setLayoutParams(lp);
                                    } else {
                                        lp.width = 10;
                                        lp.height = 10;
                                        iv.setLayoutParams(lp);
                                    }
                                    last = now;
                                }
                            }
                        }
                        break;
                    case MotionEvent.ACTION_UP:

                        Log.d("TAG", "up!!!");

                        break;
                    default:
                        break;
                }
                return true;
            }
        });
    }

    ;
    View.OnClickListener l = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.local:
                    iv.setImageResource(R.drawable.sword);
                    break;

                case R.id.network:
                    BitmapUtils utils = new BitmapUtils(getApplicationContext());
                    utils.display(iv,"http://www.baidu.com/img/bd_logo1.png");
                    break;
            }
            ;
        }
    };



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魑魅魍魉9527

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值