about zoom image

start
                Intent intent = new Intent(context, 
ImageZoomActivity.class);
                intent.putExtra("image", tabletImage.getLocalPath());
                context.startActivity(intent);



activity
public class ImageZoomActivity extends Activity implements 
View.OnClickListener {
    ImagesManager imagesManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.image_zoom);
        findViewById(R.id.btn_hide).setOnClickListener(this);
        final TouchImageView img = (TouchImageView)findViewById(R.id.tiv);
        img.setMaxZoom(4f);
        
img.setImageDrawable(getResources().getDrawable(R.drawable.image_not_find));

        if (!getIntent().hasExtra("image")){
            Log.i("show image zoom","extra miss");
            
img.setImageDrawable(getResources().getDrawable(R.drawable.image_not_find));
        }else {
            Log.i("show image zoom","start");
            String pathString = getIntent().getStringExtra("image");
            File file = new File(pathString);
            if (file.exists()) {
                Bitmap myBitmap = 
BitmapFactory.decodeFile(file.getAbsolutePath());
                if (myBitmap != null) {
                    myBitmap = Utils.ScaledBitmapIfTooBig(myBitmap);
                    img.setImageBitmap(myBitmap);
                    return;
                }
            }
        }
    }

    @Override
    public void onClick(View view) {
        finish();
    }
}

xml
<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android";
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:id="@+id/image_zoom_layout">


    <TouchImageView
        android:id="@+id/tiv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
    <Button android:id="@+id/btn_hide"
        android:layout_width="50dp"
        android:layout_margin="4dp"
        android:layout_alignParentRight="true"
        android:paddingTop="10dp"
        android:gravity="center"
        android:text="X"
        android:textSize="22dp"
        android:layout_height="50dp"/>
</RelativeLayout>


TouchImageView

public class TouchImageView extends ImageView {
    Matrix matrix;
    // We can be in one of these 3 states
    static final int NONE = 0;
    static final int DRAG = 1;
    static final int ZOOM = 2;

    int mode = NONE;

    // Remember some things for zooming
    PointF last = new PointF();
    PointF start = new PointF();
    float minScale = 1f;
    float maxScale = 3f;
    float[] m;
    int viewWidth, viewHeight;

    static final int CLICK = 3;

    float saveScale = 1f;

    protected float origWidth, origHeight;

    int oldMeasuredWidth, oldMeasuredHeight;

    ScaleGestureDetector mScaleDetector;

    Context context;

    public TouchImageView(Context context) {
        super(context);
        sharedConstructing(context);
    }

    public TouchImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        sharedConstructing(context);
    }

    private void sharedConstructing(Context context) {

        super.setClickable(true);

        this.context = context;

        mScaleDetector = new ScaleGestureDetector(context, new 
ScaleListener());

        matrix = new Matrix();

        m = new float[9];

        setImageMatrix(matrix);

        setScaleType(ScaleType.MATRIX);

        setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                mScaleDetector.onTouchEvent(event);

                PointF curr = new PointF(event.getX(), event.getY());

                switch (event.getAction()) {

                    case MotionEvent.ACTION_DOWN:

                        last.set(curr);

                        start.set(last);

                        mode = DRAG;

                        break;

                    case MotionEvent.ACTION_MOVE:

                        if (mode == DRAG) {

                            float deltaX = curr.x - last.x;

                            float deltaY = curr.y - last.y;

                            float fixTransX = getFixDragTrans(deltaX, 
viewWidth, origWidth * saveScale);

                            float fixTransY = getFixDragTrans(deltaY, 
viewHeight, origHeight * saveScale);

                            matrix.postTranslate(fixTransX, fixTransY);

                            fixTrans();

                            last.set(curr.x, curr.y);

                        }

                        break;

                    case MotionEvent.ACTION_UP:

                        mode = NONE;

                        int xDiff = (int) Math.abs(curr.x - start.x);

                        int yDiff = (int) Math.abs(curr.y - start.y);

                        if (xDiff < CLICK && yDiff < CLICK)

                            performClick();

                        break;

                    case MotionEvent.ACTION_POINTER_UP:

                        mode = NONE;

                        break;

                }

                setImageMatrix(matrix);

                invalidate();

                return true; // indicate event was handled

            }

        });
    }

    public void setMaxZoom(float x) {

        maxScale = x;

    }

    private class ScaleListener extends 
ScaleGestureDetector.SimpleOnScaleGestureListener {

        @Override
        public boolean onScaleBegin(ScaleGestureDetector detector) {

            mode = ZOOM;

            return true;

        }

        @Override
        public boolean onScale(ScaleGestureDetector detector) {

            float mScaleFactor = detector.getScaleFactor();

            float origScale = saveScale;

            saveScale *= mScaleFactor;

            if (saveScale > maxScale) {

                saveScale = maxScale;

                mScaleFactor = maxScale / origScale;

            } else if (saveScale < minScale) {

                saveScale = minScale;

                mScaleFactor = minScale / origScale;

            }

            if (origWidth * saveScale <= viewWidth || origHeight * 
saveScale <= viewHeight)

                matrix.postScale(mScaleFactor, mScaleFactor, viewWidth / 2, 
viewHeight / 2);

            else

                matrix.postScale(mScaleFactor, mScaleFactor, 
detector.getFocusX(), detector.getFocusY());

            fixTrans();

            return true;

        }

    }

    void fixTrans() {

        matrix.getValues(m);

        float transX = m[Matrix.MTRANS_X];

        float transY = m[Matrix.MTRANS_Y];

        float fixTransX = getFixTrans(transX, viewWidth, origWidth * 
saveScale);

        float fixTransY = getFixTrans(transY, viewHeight, origHeight * 
saveScale);

        if (fixTransX != 0 || fixTransY != 0)

            matrix.postTranslate(fixTransX, fixTransY);

    }



    float getFixTrans(float trans, float viewSize, float contentSize) {

        float minTrans, maxTrans;

        if (contentSize <= viewSize) {

            minTrans = 0;

            maxTrans = viewSize - contentSize;

        } else {

            minTrans = viewSize - contentSize;

            maxTrans = 0;

        }

        if (trans < minTrans)

            return -trans + minTrans;

        if (trans > maxTrans)

            return -trans + maxTrans;

        return 0;

    }

    float getFixDragTrans(float delta, float viewSize, float contentSize) {

        if (contentSize <= viewSize) {

            return 0;

        }

        return delta;

    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        viewWidth = MeasureSpec.getSize(widthMeasureSpec);

        viewHeight = MeasureSpec.getSize(heightMeasureSpec);

        //
        // Rescales image on rotation
        //
        if (oldMeasuredHeight == viewWidth && oldMeasuredHeight == 
viewHeight

                || viewWidth == 0 || viewHeight == 0)

            return;

        oldMeasuredHeight = viewHeight;

        oldMeasuredWidth = viewWidth;

        if (saveScale == 1) {

            //Fit to screen.

            float scale;

            Drawable drawable = getDrawable();

            if (drawable == null || drawable.getIntrinsicWidth() == 0 || 
drawable.getIntrinsicHeight() == 0)

                return;

            int bmWidth = drawable.getIntrinsicWidth();

            int bmHeight = drawable.getIntrinsicHeight();

            Log.d("bmSize", "bmWidth: " + bmWidth + " bmHeight : " + 
bmHeight);

            float scaleX = (float) viewWidth / (float) bmWidth;

            float scaleY = (float) viewHeight / (float) bmHeight;

            scale = Math.min(scaleX, scaleY);

            matrix.setScale(scale, scale);

            // Center the image

            float redundantYSpace = (float) viewHeight - (scale * (float) 
bmHeight);

            float redundantXSpace = (float) viewWidth - (scale * (float) 
bmWidth);

            redundantYSpace /= (float) 2;

            redundantXSpace /= (float) 2;

            matrix.postTranslate(redundantXSpace, redundantYSpace);

            origWidth = viewWidth - 2 * redundantXSpace;

            origHeight = viewHeight - 2 * redundantYSpace;

            setImageMatrix(matrix);

        }

        fixTrans();

    }

}

















בתאריך יום ראשון, 17 ביולי 2016 בשעה 08:46:44 UTC+3, מאת 
[email protected]:
>
> Hi,
>     I am developing an Android application and I need to pass multiple 
> selections from the application,similar to selection from a multiselect 
> checkbox.I have searched a lot and cannot find how to do this 
>
> anywhere.Can you please help?
>     Also, I need a Image gallery and if an image is selected user should 
> be able to zoom in the image and view image.Is there any plugin or any 
> example code that can do this that you would 
>
> recommend?
>
> Edit: To explain further I have attached a screenshot of the app.I am 
> currently passing a single size and single color on each "Add to cart".I 
> want to be able to send multiple sizes and color values.The 
>
> current code is given below. also I need to be able to zoom into the image 
> which is in the square above the size and colour box.I hope this helps 
> explain the problem I am facing.
>
> EDIT: I am putting a shortened version of the code.This code passes a size 
> value from the spinner when a value is 
> selected.(setOnItemSelectedListener).the spinner has id size_spinner.
>
> JAVA
>
> private void setSizeData(Context context, int pos) {
>
> sizeList = new ArrayList<>();
>
>
> sizeList = style_modelsList.get(pos).getSizeModels();
>
> if (sizeList != null) {
> SizeAdapter sizeAdapter = new SizeAdapter(context);
> size_spinner.setAdapter(sizeAdapter);
> size_spinner.setOnItemSelectedListener(new 
> AdapterView.OnItemSelectedListener() {
> @Override
> public void onItemSelected(AdapterView
>
>
> }
>
> @Override
> public void onNothingSelected(AdapterView
> }
> }); 
>

-- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/android-developers.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/android-developers/51163f98-6ef3-4c9a-bdc8-a81f83975d18%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to