Selain menggunakan zoom control untuk setting zoom in/out suatu tampilan diandroid, bisa juga kita defenisikan dengan menggunakan teknik tombol atas/bawah di keypad untuk inisialisasi setting zoom pada tampilan android.
Berikut adalah contohnya :
Zoom.java
package Doa.Harian; import android.content.Context; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.view.KeyEvent; import android.view.View; public class Zoom extends View { private Drawable image; private int zoomControler=20; public Zoom(Context context) { super(context); image=context.getResources().getDrawable(R.drawable.doaakanmakan); setFocusable(true); } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); //mengatur besarnya tampilan image.setBounds((getWidth()/2)-zoomControler, (getHeight()/2)-zoomControler, (getWidth()/2)+zoomControler, (getHeight()/2)+zoomControler); image.draw(canvas); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_DPAD_UP)// zoom in zoomControler+=10; if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN) // zoom out zoomControler-=10; if(zoomControler<10) zoomControler=10; invalidate(); return true; } }
Penjelasan :
Object image yang kita gunakan didefenesikan dengan code
image=context.getResources().getDrawable(R.drawable.doaakanmakan);
Kondisi jika keypad up/down ditekan dengan coding berikut :
if(keyCode==KeyEvent.KEYCODE_DPAD_UP)// zoom in zoomControler+=10; if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN) // zoom out zoomControler-=10;
Mengatur besarnya tampilan
//mengatur besarnya tampilan image.setBounds((getWidth()/2)-zoomControler, (getHeight()/2)-zoomControler, (getWidth()/2)+zoomControler, (getHeight()/2)+zoomControler);
Mudah2 an berguna.
uxc.wilis
π
mas,,saya dah coba tp ko force close yaa…
trus itu ko ga ada xml nya?
ndak perlu xml itu gan…
pastikan ada image agan dalam hal diatas contohnya doaakanmakan.jpg/png
masih blom bisa gan…knp yaa??force close mulu
udah saya coba kog gagh bisa ya mas…activitynya gmn tuh mas?
activity yang mana maksudnya ya… kan simple aja tuh gan..?
di analisa di logcatnya dulu lah..apa salahnya.,, jangan2 hal mendasar yang lain yang salah..
pastikan gambarnya disesuaikan dengan project anda ?
gan, saya udah nyoba tp kok gak b’fungsi yaa zooming nya ?
bingung π
ga berfungsi. . .
ko force close y?
image sudah benar
mas..kok ga bisa yah force close,duh saya butuh bgt nih.. π¦
Untuk yang dimasukkan ke object yang di juzz amma di buku situ bagaimana ya mas. @Miaw, liat variabelnya di string.xml sama mainfest.xml aja, itu harus sama dengan nama classsnya
Mas ,,,itu di buat class zoom tersendiri ya?apa digabung dengan class d1 d2 d3 nya?
Thanx ilmunya… running gan
ga jalan Gan.. d otak atik ini itu.. tetep ga jalan,, ko ga ngaruh apa2 ya..
nech gan ana udah nemu yg lebih simple:
package ganesha.operation;
import android.app.Activity;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.os.Bundle;
import android.util.FloatMath;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
// import android.annotation.SuppressLint;
public class g12ipabioVIRUS extends Activity {
ImageView imageDetail;
Matrix matrix = new Matrix();
Matrix savedMatrix = new Matrix();
PointF startPoint = new PointF();
PointF midPoint = new PointF();
float oldDist = 1f;
static final int NONE = 0;
static final int DRAG = 1;
static final int ZOOM = 2;
int mode = NONE;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.zoom12ipabiovirus);
imageDetail = (ImageView) findViewById(R.id.imageView1);
/**
* set on touch listner on image
*/
imageDetail.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
ImageView view = (ImageView) v;
System.out.println(“matrix=” + savedMatrix.toString());
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
savedMatrix.set(matrix);
startPoint.set(event.getX(), event.getY());
mode = DRAG;
break;
case MotionEvent.ACTION_POINTER_DOWN:
oldDist = spacing(event);
if (oldDist > 10f) {
savedMatrix.set(matrix);
midPoint(midPoint, event);
mode = ZOOM;
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
mode = NONE;
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
matrix.set(savedMatrix);
matrix.postTranslate(event.getX() – startPoint.x,
event.getY() – startPoint.y);
} else if (mode == ZOOM) {
float newDist = spacing(event);
if (newDist > 10f) {
matrix.set(savedMatrix);
float scale = newDist / oldDist;
matrix.postScale(scale, scale, midPoint.x, midPoint.y);
}
}
break;
}
view.setImageMatrix(matrix);
return true;
}
// @SuppressLint(“FloatMath”)
private float spacing(MotionEvent event) {
float x = event.getX(0) – event.getX(1);
float y = event.getY(0) – event.getY(1);
return FloatMath.sqrt(x * x + y * y);
}
private void midPoint(PointF point, MotionEvent event) {
float x = event.getX(0) + event.getX(1);
float y = event.getY(0) + event.getY(1);
point.set(x / 2, y / 2);
}
});
}
}
Relat errornya gan
package com.yakes.telkom;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.FloatMath;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import static java.lang.Math.sqrt;
// import android.annotation.SuppressLint;
public class ViewTest extends AppCompatActivity {
ImageView imageDetail;
Bundle extra;
String image;
Matrix matrix = new Matrix();
Matrix savedMatrix = new Matrix();
PointF startPoint = new PointF();
PointF midPoint = new PointF();
float oldDist = 1f;
static final int NONE = 0;
static final int DRAG = 1;
static final int ZOOM = 2;
int mode = NONE;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_view_image);
imageDetail = (ImageView) findViewById(R.id.imageView);
extra = getIntent().getExtras();
image = extra.getString(“picture”);
System.out.println(“ini image = ” + image);
try {
byte[] decodedString = android.util.Base64.decode(image.getBytes(), android.util.Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
imageDetail.setImageBitmap(decodedByte);
} catch (Exception e) {
e.printStackTrace();
}
/**
* set on touch listner on image
*/
imageDetail.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
ImageView view = (ImageView) v;
System.out.println(“matrix=” + savedMatrix.toString());
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
savedMatrix.set(matrix);
startPoint.set(event.getX(), event.getY());
mode = DRAG;
break;
case MotionEvent.ACTION_POINTER_DOWN:
oldDist = spacing(event);
if (oldDist > 10f) {
savedMatrix.set(matrix);
midPoint(midPoint, event);
mode = ZOOM;
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
mode = NONE;
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
matrix.set(savedMatrix);
matrix.postTranslate(event.getX() – startPoint.x, event.getY() – startPoint.y);
} else if (mode == ZOOM) {
float newDist = spacing(event);
if (newDist > 10f) {
matrix.set(savedMatrix);
float scale = newDist / oldDist;
matrix.postScale(scale, scale, midPoint.x, midPoint.y);
}
}
break;
}
view.setImageMatrix(matrix);
return true;
}
// @SuppressLint(βFloatMathβ)
private float spacing(MotionEvent event) {
float x = event.getX(0) – event.getX(1);
float y = event.getY(0) – event.getY(1);
return (float)Math.sqrt(x * x + y * y);
}
private void midPoint(PointF point, MotionEvent event) {
float x = event.getX(0) + event.getX(1);
float y = event.getY(0) + event.getY(1);
point.set(x / 2, y / 2);
}
});
}
}
gan ada tutorial menggeser gambar 1 ke 2?