private Drawable image; //
image = context.getResources().getDrawable(R.drawable.img); image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight());
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.save(); // (, .....) image.draw(canvas); // canvas.restore(); // , }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new PZoom(this)); }
int X = 0,Y = 0; // float scale = 0; // int pX = 0, pY = 0; // int dWidth = 0, dHeight = 0; //
void SetCenter(){ // if(dWidth>dHeight) // scale = (float)dHeight/image.getIntrinsicHeight(); else scale = (float)dWidth/image.getIntrinsicWidth(); // if((dWidth-image.getIntrinsicWidth()*scale)>0){ X = (int)((dWidth-(image.getIntrinsicWidth()*scale))/2/scale); Y = 0; } else { X = 0; Y = (int)((dHeight-(image.getIntrinsicHeight()*scale))/2/scale); } }
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.save(); // (, .....) if (dWidth==0){ // dWidth = canvas.getWidth(); dHeight = canvas.getHeight(); } if (pX==0) { // SetCenter(); // } canvas.scale(scale, scale); // ZooM canvas.translate(X,Y); // image.draw(canvas); // canvas.restore(); // , }
@Override public boolean onTouchEvent(MotionEvent event) { // pX=(int) event.getX(); // X pY=(int) event.getY(); // Y int Action=event.getAction(); // // if (Action==MotionEvent.ACTION_UP){ pX = 0; pY = 0; } invalidate(); // return true; }
void NewPosition(){ scale = 1; // // X = (int)((float)-image.getIntrinsicWidth()*((float)pX/dWidth)+((float)dWidth*((float)pX/dWidth))); Y = (int)((float)-image.getIntrinsicHeight()*((float)pY/dHeight)+((float)dHeight*((float)pY/dHeight))); // if (X>0) X=0; if (Y>0) Y=0; }
if (pX==0) { // SetCenter(); // } else { NewPosition(); // }
package com.gc986.photozoom; import android.content.Context; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.view.MotionEvent; import android.view.View; public class PZoom extends View { private Drawable image; // int X = 0,Y = 0; // float scale = 0; // int pX = 0, pY = 0; // int dWidth = 0, dHeight = 0; // public PZoom(Context context) { super(context); // image = context.getResources().getDrawable(R.drawable.img); image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight()); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.save(); // (, .....) if (dWidth==0){ // dWidth = canvas.getWidth(); dHeight = canvas.getHeight(); } if (pX==0) { // SetCenter(); // } else { NewPosition(); // } canvas.scale(scale, scale); // ZooM canvas.translate(X,Y); // image.draw(canvas); // canvas.restore(); // , } /** */ void SetCenter(){ // if(dWidth>dHeight) // scale = (float)dHeight/image.getIntrinsicHeight(); else scale = (float)dWidth/image.getIntrinsicWidth(); // if((dWidth-image.getIntrinsicWidth()*scale)>0){ X = (int)((dWidth-(image.getIntrinsicWidth()*scale))/2/scale); Y = 0; } else { X = 0; Y = (int)((dHeight-(image.getIntrinsicHeight()*scale))/2/scale); } } /** */ void NewPosition(){ scale = 1; // // X = (int)((float)-image.getIntrinsicWidth()*((float)pX/dWidth)+((float)dWidth*((float)pX/dWidth))); Y = (int)((float)-image.getIntrinsicHeight()*((float)pY/dHeight)+((float)dHeight*((float)pY/dHeight))); // if (X>0) X=0; if (Y>0) Y=0; } @Override public boolean onTouchEvent(MotionEvent event) { // pX=(int) event.getX(); // X pY=(int) event.getY(); // Y int Action=event.getAction(); // // if (Action==MotionEvent.ACTION_UP){ pX = 0; pY = 0; } invalidate(); // return true; } }
Source: https://habr.com/ru/post/191898/
All Articles