рдЦрд░реЛрдВрдЪ рд╕реЗ Android рдШрдЯрдХ - 2 - рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд░реНрдзрдХ

рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рд╕рдордп-рд╕рдордп рдкрд░, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рджреБрдХрд╛рдиреЛрдВ рдФрд░ рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рдлрд░реНрд╢ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдкрд░, рд╣рдо рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЖрд╡рд░реНрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рд╛рдорд╛рдиреЛрдВ рдХреА рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рддрд╕реНрд╡реАрд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рд╡реЗрдмрд╕рд╛рдЗрдЯ www.ebay.com рдкрд░ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рд╣рдо рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо (рд╡рд┐рд╢реЗрд╖рдХрд░ рд╢реБрд░реБрдЖрддреА) рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЖрд╡рд░реНрдзрдХ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд▓рдЧреЗ рд░рд╣реЗрдВрдЧреЗред

рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ: рддрд╕реНрд╡реАрд░реЛрдВ рдХреА рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдЯрдХ рдЖрд╡рд░реНрдзрдХ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд░рдирд╛ред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╕реНрдХреНрд░реАрди рдПрдХ рдЪрд┐рддреНрд░ рджрд┐рдЦрд╛рддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рдЖрдпрд╛рдо рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд╕реНрдХреНрд░реАрди рдХреЗ рдЖрдиреБрдкрд╛рддрд┐рдХ рд╣реЛрддреЗ рд╣реИрдВ (рдЪрд┐рддреНрд░ рдкреВрд░реНрдг рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдЬрдм рдЖрдк рд╕реНрдХреНрд░реАрди рдкрд░ рдЕрдкрдиреА рдЙрдВрдЧрд▓реА рдХреЛ рдЫреВрддреЗ рд╣реИрдВ, рддреЛ рдЫрд╡рд┐ рдХреЛ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕реНрдкрд░реНрд╢ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрд░реНрдерд╛рдд, рдЬрдм рдЖрдк рдкреНрд░рддрд┐рд╢рдд рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЫрд╡рд┐ рдХрд╛ рдмрдврд╝реЗ рд╣реБрдП рдордзреНрдп рднрд╛рдЧ рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЬрдм рдЖрдк рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рджрд╛рд╣рд┐рдиреЗ рдКрдкрд░реА рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рдмрдврд╝рд╛ рд╣реБрдЖ рднрд╛рдЧ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЖрджрд┐ред рдПрдиред

рдЯреНрд░реЗрдирд┐рдВрдЧ


рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ PZoom рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ, рдкреВрд░реНрд╡рдЬреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рджреГрд╢реНрдп рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:
PZoom - рд╡рд░реНрдЧ рдирд┐рд░реНрдорд╛рддрд╛;
onDraw - рдбреНрд░рд╛рдЗрдВрдЧ рдлрд╝рдВрдХреНрд╢рди, рд╣рд░ рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдШрдЯрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ;
onTouchEvent - рдмрд╛рд╣рд░реА рдШрдЯрдирд╛рдУрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп, рдЬрд┐рд╕реЗ рд╣рд░ рдмрд╛рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдВрдЧрд▓реА рд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдШрдЯрдХ рдХреЛ рдЫреВрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЬрдм рд╡рд╣ рдШрдЯрдХ рдкрд░ рдЕрдкрдиреА рдЙрдВрдЧрд▓реА рдШреБрдорд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреА рдЙрдВрдЧрд▓реА рднреА рджрдмрд╛рддрд╛ рд╣реИред
рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдбреНрд░рд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд░рдЦреА рдЧрдИ рдХреЗрд╡рд▓ рдПрдХ рддрд╕реНрд╡реАрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ "img" рдирд╛рдо рд╕реЗ рдХрд░реЗрдВрдЧреЗ (рдЪрд┐рддреНрд░ рдЬрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛, рдЙрддрдирд╛ рд╣реА рдЕрдзрд┐рдХ рджреГрд╢реНрдп рдкреНрд░рднрд╛рд╡ рдЖрдкрдХреЛ рдорд┐рд▓реЗрдЧрд╛)ред рдХрдХреНрд╖рд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдбреНрд░рд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВред
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)); } 

рдпреЗ рдХреНрд░рд┐рдпрд╛рдПрдВ Pzoom рдХреНрд▓рд╛рд╕ рдмрдирд╛рддреА рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдореБрдЦреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИрдВ, рдпрд╛рдиреА рдЕрдм рдХреЗрд╡рд▓ рдЗрд╕ рдШрдЯрдХ рдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдм, рдпрджрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕реНрдХреНрд░реАрди рдкрд░ рдХреЗрд╡рд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдЫрд╡рд┐ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рджреЗрдЦреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИ (рдЪрд┐рддреНрд░ рд╕реНрдХреНрд░реАрди рд╕реЗ рдмрдбрд╝рд╛ рд╣реИ)ред

рдХрд╛рд░реНрдпрд╛рддреНрдордХ


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪрд┐рддреНрд░ рдХреЛ рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рдореЗрдВ рдлрд┐рдЯ рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдЖрдпрд╛рдо рд╕реНрдХреНрд░реАрди рдХреЗ рдЖрдиреБрдкрд╛рддрд┐рдХ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЕрд▓рдЧ рд╕реЗрдЯрдХреЗрдВрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рд╕рддрд╣ рдкрд░ рдЫрд╡рд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдиреБрдкрд╛рдд рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЧреБрдгрдХ рднреА рд╣реЛрддрд╛ рд╣реИред
рдХрдХреНрд╖рд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:
  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; } } 

рдЗрд╕реЗ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - http://youtu.be/GHB91_RzORY
рдЖрдк рдирд┐рдореНрди рд▓рд┐рдВрдХ рдкрд░ рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдирдореВрдирд╛ рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - http://www.anprog.com/documents/Photo_Zoom.zip

Source: https://habr.com/ru/post/In191898/


All Articles