我想重新创建与Gallery3D相同类型的应用程序,但更简单:没有3D动画,基本上只保留GridView和Gallery小部件.我还想在所选图像上启用多点触摸缩放 - 拖动 - 掠夺,这就是我正在努力的地方.我在网上查看了简单的教程,我也查看了Gallery3D源代码,但找不到合适的解决方案.
我能得到的最接近的是在我的Gallery Adapter中使用下面的自定义ImageView.
它工作,我可以捏缩放和拖动,除了图像离开屏幕,我无法滚动到库中的下一个图像.另外,捏合和缩放并不完美,因为它只能缩放图像并且无法正确地重新定位.我应该在Gallery上添加onTouchEvent吗?
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;
public class MyImageView extends View {
private static final int INVALID_POINTER_ID = -1;
private BitmapDrawable mImage;
private float mPosX;
private float mPosY;
private float mLastTouchX;
private float mLastTouchY;
private int mActivePointerId = INVALID_POINTER_ID;
private ScaleGestureDetector mScaleDetector;
private float mScaleFactor = 1.f;
public MyImageView(Context context, BitmapDrawable bd) {
this(context, null, 0);
mImage = bd;
mImage.setBounds(0, 0, mImage.getIntrinsicWidth(), …Run Code Online (Sandbox Code Playgroud) 我试图使用MediaController.MediaPlayerControl,以便MediaController在我的自定义视图的底部显示,但我无法让它工作.它的崩溃在ctrl.show();具有以下例外,每当我尝试加载这样的观点:
E/AndroidRuntime(3007):引起:android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null无效; 你的活动在运行吗?
这是我的代码.
public class MediaPlayerView extends ImageView implements MediaPlayerControl {
private MediaPlayer mp;
private MediaController ctrl;
private Uri data;
private Context mContext;
public MediaPlayerView(Context context, Uri data) {
super(context);
this.mContext = context;
this.data = data;
init();
}
public void init() {
mp = new MediaPlayer();
try {
mp.setDataSource(mContext, data);
mp.prepare();
} catch(IOException e) {
e.printStackTrace();
}
ctrl = new MediaController(mContext);
ctrl.setMediaPlayer(this);
ctrl.setAnchorView(this);
ctrl.setEnabled(true);
ctrl.show();
}
public boolean canPause() …Run Code Online (Sandbox Code Playgroud)