
xml
<ImageView
android:id="@+id/know_star"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="matrix"
android:src="@drawable/earth_know"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
activity
private Matrix mMatrix = new Matrix();
private float mScaleFactor = .4f;
private float mRotationDegrees = 0.f;
private float mFocusX = 0.f;
private float mFocusY = 0.f;
private int mImageHeight, mImageWidth;
private ParticleSystem ps;
private ScaleGestureDetector mScaleDetector; //定義圖片的放大縮小
private RotateGestureDetector mRotateDetector; //設定圖片旋轉
private ImageView knowHelp;
@SuppressLint("UseCompatLoadingForDrawables")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_knowledge);
initView();
// 獲取螢屏的中心點
Display display = getWindowManager().getDefaultDisplay();
mFocusX = display.getWidth() / 2f; //螢屏的寬度一半
mFocusY = display.getHeight() / 3f; //螢屏的高度一半
// 確定維度的地球影像
Drawable d = this.getResources().getDrawable(stars[star - 1]);
mImageHeight = d.getIntrinsicHeight();
mImageWidth = d.getIntrinsicWidth();
// 視圖縮放和轉動的矩陣
float scaledImageCenterX = (mImageWidth * mScaleFactor) / 2;
float scaledImageCenterY = (mImageHeight * mScaleFactor) / 2;
mMatrix.postScale(mScaleFactor, mScaleFactor);
/**
* 用Matrix類中的平移方法設定地球的位置
* */
mMatrix.postTranslate(mFocusX - scaledImageCenterX, mFocusY - scaledImageCenterY);
knowStar.setImageMatrix(mMatrix); //將地球設定到螢屏中心
// 設定手勢檢測器
mScaleDetector = new ScaleGestureDetector(getApplicationContext(), new ScaleListener()); //圖片縮放
mRotateDetector = new RotateGestureDetector(getApplicationContext(), new RotateListener()); //圖片的旋轉
}
@SuppressLint("ClickableViewAccessibility")
private void initView() {
knowBack = (ImageView) findViewById(R.id.know_back);
knowStar = (ImageView) findViewById(R.id.know_star);
knowKnow = (ImageView) findViewById(R.id.know_know);
// 將圖片設定觸碰監聽
knowStar.setOnTouchListener(this);
knowHelp = (ImageView) findViewById(R.id.know_help);
}
@Override
protected void onPause() {
super.onPause();
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
}
/**
* 設定手勢
*/
@SuppressLint("ClickableViewAccessibility")
public boolean onTouch(View v, MotionEvent event) {
knowHelp.setVisibility(View.GONE);
mScaleDetector.onTouchEvent(event); //設定圖片縮放的監聽
mRotateDetector.onTouchEvent(event); //設定圖片的旋轉監聽
float scaledImageCenterX = (mImageWidth * mScaleFactor) / 2;
float scaledImageCenterY = (mImageHeight * mScaleFactor) / 2;
mMatrix.reset();
mMatrix.postScale(mScaleFactor, mScaleFactor);
mMatrix.postRotate(mRotationDegrees, scaledImageCenterX, scaledImageCenterY);
mMatrix.postTranslate(mFocusX - scaledImageCenterX, mFocusY - scaledImageCenterY);
ImageView view = (ImageView) v;
view.setImageMatrix(mMatrix);
return true; // 指示事件處理
}
/**
* 圖片的放大縮小的監聽
*/
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
mScaleFactor *= detector.getScaleFactor();
//不要讓物體太小或太大,
mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 10.0f));
return true;
}
}
/**
* 圖片轉動的監聽
*/
private class RotateListener extends RotateGestureDetector.SimpleOnRotateGestureListener {
@Override
public boolean onRotate(RotateGestureDetector detector) {
mRotationDegrees -= detector.getRotationDegreesDelta();
return true;
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/273609.html
標籤:其他
上一篇:PHP Yaf(Yet Another Framework) 擴展及框架部署
下一篇:App公共測驗用例梳理
