相关疑难解决方法(0)

VideoView匹配父高度并保持纵横比

我有一个像这样设置的VideoView:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:id="@+id/player" 
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

    <VideoView
        android:id="@+id/video"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:layout_centerVertical="true" />

    <ProgressBar
        android:id="@+id/loader"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

但VideoView匹配父容器的宽度,然后根据加载的影片的宽高比设置高度.
我想做的恰恰相反,我希望VideoView与父级的高度相匹配,同时保持宽高比不变,视频将被剪裁在两侧.

我设法拉伸VideoView来填充父级,但是不保持宽高比.

另一件事是,我将MediaController添加到VideoView,如下所示:

MediaController controllers = new MediaController(this) {
    @Override
    public void hide() {
        if (state != State.Hidden) {
            this.show();
        }
        else {
            super.hide();
        }
    }
};
controllers.setAnchorView(videoView);
videoView.setMediaController(controllers);

videoView.setOnPreparedListener(new OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mediaPlayer) {
        controllers.show();
    }
});
Run Code Online (Sandbox Code Playgroud)

这很好用,并且控制器始终保持打开状态,但在计算放置视频的位置时(因为它垂直居中),控制器的高度不会被考虑在内.

我的两个问题是:

  1. 如何使VideoView与父级的高度匹配,同时保持宽高比?
  2. 如何让VideoView考虑到它的控制器的高度?

谢谢.

android aspect-ratio dimensions android-videoview

28
推荐指数
6
解决办法
4万
查看次数

如何使SurfaceView比屏幕更大?

我想有效地为相机预览做一个简单的数码变焦,所以我想我只需要将SurfaceView的大小调整为大于屏幕.其他问题(例如3813049)似乎表明这很容易,所以我创建了下面的示例代码,我希望让我只能看到水平图像的一半(因为SurfaceView的宽度是屏幕的两倍)并且具有图像只占水平屏幕的一半.但是,运行它(当我的Thunderbolt上使用Android 2.2.1定位到SDK版本4时)可以在水平填充屏幕时水平查看整个图像.SurfaceView似乎垂直行为(当我使它小于屏幕时),但Android不允许我使SurfaceView大于屏幕.

如何实现数码变焦?(不,我不能使用Camera.Parameters.setZoom;不仅Android 1.6不支持这种功能,而且不同的相机支持和实现这一点不同)

public class MagnifyTestActivity extends Activity implements SurfaceHolder.Callback {
    private MagnificationView mPreview;
    private SurfaceHolder mHolder;
    private Camera mCamera = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mPreview = new MagnificationView(this);
        setContentView(mPreview);
        mHolder = mPreview.getHolder();
        mHolder.addCallback(this);
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    public class MagnificationView extends SurfaceView {
        public MagnificationView(Context context) {
            super(context);
        }

        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            Display display = getWindowManager().getDefaultDisplay();
            int width = display.getWidth()*2;
            int height = display.getHeight()/2;
            widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
            heightMeasureSpec …
Run Code Online (Sandbox Code Playgroud)

camera android zoom surfaceview

13
推荐指数
1
解决办法
6406
查看次数

Android:获取旋转的OSM映射以填充整个屏幕

我正在开发一个应用程序,它使用OpenStreetMap(OSM)API在离线地图上显示由静态切片组成的各种兴趣点.

我目前正在实现的功能之一是让地图根据手机确定的方位旋转(通过GPS).我能够毫不费力地实现实际旋转,但由于我的代码旋转了整个画布 - 也许是一种相当天真的方法 - 我现在屏幕上有空白的角落,没有新的瓷砖被加载以补偿事实旋转的瓷砖不再填充这些像素.

经过一段谷歌搜索后,我找到了一些关于如何解决这个问题的建议,但到目前为止还没有运气.

Romain Guy先生的一个帖子中,他提到了以下内容:

我过去已经这样做了,它需要创建一个自定义ViewGroup,在dispatchDraw()方法中旋转Canvas.您还需要增加MapView的大小(以便在旋转时绘制足够的像素.)您还需要在dispatchTouchEvent()中旋转触摸事件.或者,如果您使用Android 3.0,您只需调用theMapView.rotate()

根据他对地图轮换的建议,我已经按照建议实现了dispatchDraw()和dispatchTouchEvent(),但是我在提到需要增加MapView大小的部分时遇到了问题?

这是我在XML文件中做的事情,就像在这个线程中建议的那样?

或者,我可以以某种方式覆盖处理我的地图旋转的子类RelativeLayout类中的onMeasure()函数吗?

建议和提示是最受欢迎的.

更新:

为了找到这个问题的可接受的解决方案,我试图改变画布的大小.我们的想法是,如果画布尺寸大于实际屏幕尺寸,我可能会将空白角完全移出屏幕.不幸的是,似乎没有实际的canvas.size()选项; 我找到的最好的是canvas.scale().

使用canvas.scale(),我能够在水平和垂直尺寸上将画布的比例增加2倍.然而,这意味着图像被有效地放大,导致对地图图块的不可接受的像素化.

有谁知道画布的大小在哪里声明,如果改变画布的大小可能实际上解决了我的问题?

layout android openstreetmap

9
推荐指数
1
解决办法
1903
查看次数