Twidere-App-Android-Twitter.../twidere.component.viewer.media/src/main/java/org/mariotaku/tileimageview/widget/TileImageView.java

282 lines
9.0 KiB
Java

/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2015 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.tileimageview.widget;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapRegionDecoder;
import android.graphics.Point;
import android.os.Build;
import android.support.annotation.NonNull;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.qozix.layouts.ZoomPanLayout.GestureListener;
import com.qozix.layouts.ZoomPanLayout.ZoomPanListener;
import com.qozix.tileview.TileView;
import com.qozix.tileview.TileView.TileViewEventListener;
import com.qozix.tileview.hotspots.HotSpot;
import com.qozix.tileview.hotspots.HotSpotEventListener;
import com.qozix.tileview.markers.MarkerEventListener;
import org.mariotaku.tileimageview.decoder.AbsTileDecoder;
import org.mariotaku.tileimageview.decoder.BitmapRegionTileDecoder;
import org.mariotaku.tileimageview.decoder.DummyTileDecoder;
import java.util.ArrayList;
import java.util.List;
@SuppressWarnings("unused")
public final class TileImageView extends FrameLayout {
private final TileView mTileView;
private AbsTileDecoder mTileDecoder;
public TileImageView(final Context context) {
this(context, null);
}
public TileImageView(final Context context, final AttributeSet attrs) {
this(context, attrs, 0);
}
public TileImageView(final Context context, final AttributeSet attrs, final int defStyle) {
super(context, attrs, defStyle);
mTileView = new TileView(context);
super.addView(mTileView, 0, generateDefaultLayoutParams());
}
public View addCallout(final View view, final double x, final double y) {
return mTileView.addCallout(view, x, y);
}
public View addCallout(final View view, final double x, final double y, final float anchorX, final float anchorY) {
return mTileView.addCallout(view, x, y, anchorX, anchorY);
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void addChildrenForAccessibility(@NonNull final ArrayList<View> childrenForAccessibility) {
mTileView.addChildrenForAccessibility(childrenForAccessibility);
}
@Override
public void addFocusables(final ArrayList<View> views, final int direction) {
mTileView.addFocusables(views, direction);
}
@Override
public void addFocusables(@NonNull final ArrayList<View> views, final int direction, final int focusableMode) {
mTileView.addFocusables(views, direction, focusableMode);
}
public boolean addGestureListener(final GestureListener listener) {
return mTileView.addGestureListener(listener);
}
public HotSpot addHotSpot(final HotSpot hotSpot) {
return mTileView.addHotSpot(hotSpot);
}
public HotSpot addHotSpot(final List<double[]> positions) {
return mTileView.addHotSpot(positions);
}
public HotSpot addHotSpot(final List<double[]> positions, final HotSpotEventListener listener) {
return mTileView.addHotSpot(positions, listener);
}
public void addHotSpotEventListener(final HotSpotEventListener listener) {
mTileView.addHotSpotEventListener(listener);
}
public View addMarker(final View view, final double x, final double y) {
return mTileView.addMarker(view, x, y);
}
public View addMarker(final View view, final double x, final double y, final float anchorX, final float anchorY) {
return mTileView.addMarker(view, x, y, anchorX, anchorY);
}
public void addMarkerEventListener(final MarkerEventListener listener) {
mTileView.addMarkerEventListener(listener);
}
public void addTileViewEventListener(final TileViewEventListener listener) {
mTileView.addTileViewEventListener(listener);
}
@Override
public void addView(@NonNull final View child) {
throw new UnsupportedOperationException();
}
@Override
public void addView(@NonNull final View child, final int index) {
throw new UnsupportedOperationException();
}
@Override
public void addView(@NonNull final View child, final int width, final int height) {
throw new UnsupportedOperationException();
}
@Override
public void addView(@NonNull final View child, final int index, final ViewGroup.LayoutParams params) {
throw new UnsupportedOperationException();
}
@Override
public void addView(@NonNull final View child, final ViewGroup.LayoutParams params) {
throw new UnsupportedOperationException();
}
public boolean addZoomPanListener(final ZoomPanListener listener) {
return mTileView.addZoomPanListener(listener);
}
public void cancelRender() {
mTileView.cancelRender();
}
@Override
public boolean canScrollHorizontally(final int direction) {
final double scaledBoundaryX = mTileView.getScaledWidth();
final int scrollX = mTileView.getScrollX();
return scrollX + direction > 0 && scrollX + mTileView.getWidth() + direction < scaledBoundaryX;
}
@Override
public boolean canScrollVertically(final int direction) {
final double scaledBoundaryY = mTileView.getScaledHeight();
final int scrollY = mTileView.getScrollY();
return scrollY + direction > 0 && scrollY + mTileView.getHeight() + direction < scaledBoundaryY;
}
@Override
public boolean dispatchTouchEvent(@NonNull final MotionEvent ev) {
return mTileView.dispatchTouchEvent(ev);
}
public int getBaseHeight() {
return mTileView.getBaseHeight();
}
public int getBaseWidth() {
return mTileView.getBaseWidth();
}
public Point getCenter() {
return new Point(mTileView.getScrollX(), mTileView.getScrollY());
}
public double getScale() {
return mTileView.getScale();
}
public boolean removeGestureListener(final GestureListener listener) {
return mTileView.removeGestureListener(listener);
}
public void removeHotSpot(final HotSpot hotSpot) {
mTileView.removeHotSpot(hotSpot);
}
public void removeHotSpotEventListener(final HotSpotEventListener listener) {
mTileView.removeHotSpotEventListener(listener);
}
public void removeMarkerEventListener(final MarkerEventListener listener) {
mTileView.removeMarkerEventListener(listener);
}
public void requestRender() {
mTileView.requestRender();
}
public void resume() {
mTileView.resume();
}
public void scrollToAndCenter(final Point point) {
mTileView.scrollToAndCenter(point);
}
public void scrollToPoint(final Point point) {
mTileView.scrollToPoint(point);
}
public void setBitmapRegionDecoder(final BitmapRegionDecoder decoder, final Bitmap fallback) {
if (mTileDecoder != null && mTileDecoder.isSameDecoder(decoder)) return;
if (mTileDecoder != null) {
mTileDecoder.recycle();
mTileDecoder = null;
}
if (decoder == null) {
mTileDecoder = new DummyTileDecoder(fallback);
} else {
mTileDecoder = new BitmapRegionTileDecoder(decoder);
}
mTileDecoder.attachToTileView(mTileView);
}
public void setDragStartThreshold(final int threshold) {
mTileView.setDragStartThreshold(threshold);
}
public void setScale(final double d) {
mTileView.setScale(d);
}
public void setScaleLimits(final double min, final double max) {
mTileView.setScaleLimits(min, max);
}
public void setScaleToFit(final boolean shouldScaleToFit) {
mTileView.setScaleToFit(shouldScaleToFit);
}
public void slideToAndCenter(final double x, final double y) {
mTileView.slideToAndCenter(x, y);
}
public void slideToAndCenter(final Point point) {
mTileView.slideToAndCenter(point);
}
public void slideToPoint(final Point point) {
mTileView.slideToPoint(point);
}
public void smoothScaleTo(final double destination, final int duration) {
mTileView.smoothScaleTo(destination, duration);
}
@Override
protected LayoutParams generateDefaultLayoutParams() {
return new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER);
}
}