PS:Android對於圖片處理這塊資源仍是挺多的,以前用OpenGL製做圖片的全景效果,耗時耗力,並且只能點擊進去後看到,可是效果是很是的號,今天所寫的是編寫好的一個圖片控件,只要拿來用就能夠了。效果不是那麼好,處理的以後就是一張圖片截取中間部分放大再顯示在屏幕中間,經過擺動手機查看被遮擋部分,如圖:一開始圖片是這樣的android
上面就是效果圖了app
//全景圖片 compile 'com.gjiazhe:PanoramaImageView:1.0'
<com.gjiazhe.panoramaimageview.PanoramaImageView android:id="@+id/panorama_image_view" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/timg" app:piv_enablePanoramaMode="true" app:piv_show_scrollbar="true" app:piv_invertScrollDirection="false" />
佈局的根目錄必定要加上ide
xmlns:app="http://schemas.android.com/apk/res-auto"
這裏面有三個屬性(其中三個)佈局
一個是app:piv_enablePanoramaMode,使用全景效果模式,app:piv_show_scrollbar滾動條顯示,app:piv_invertScrollDirection顛倒滾動方向,不一樣的值就會呈現不一樣的效果。this
在使用PanoramaImageView的Activity或Fragment中,您應該在onResume()中註冊GyroscopeObserver,並記得在onPause()中註銷它。spa
public class MyActivity extends AppCompatActivity { private GyroscopeObserver gyroscopeObserver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Initialize GyroscopeObserver. gyroscopeObserver = new GyroscopeObserver(); // Set the maximum radian the device should rotate to show image's bounds. // It should be set between 0 and π/2. // The default value is π/9. gyroscopeObserver.setMaxRotateRadian(Math.PI/9); PanoramaImageView panoramaImageView = (PanoramaImageView) findViewById(R.id.panorama_image_view); // Set GyroscopeObserver for PanoramaImageView. panoramaImageView.setGyroscopeObserver(gyroscopeObserver); } @Override protected void onResume() { super.onResume(); // Register GyroscopeObserver. gyroscopeObserver.register(this); } @Override protected void onPause() { super.onPause(); // Unregister GyroscopeObserver. gyroscopeObserver.unregister(); } }
設置OnPanoramaScrollListener以觀察滾動狀態 若是要在圖像滾動時得到回調,PanoramaImageView須要設置OnPanoramaScrollListener。code
panoramaImageView.setOnPanoramaScrollListener(new PanoramaImageView.OnPanoramaScrollListener() { @Override public void onScrolled(PanoramaImageView view, float offsetProgress) { // Do something here. // The offsetProgress range from -1 to 1, indicating the image scrolls // from left(top) to right(bottom). } });