android调整视频方向,android – 调整视频大小

我正在尝试动态设置

Android VideoView的大小.我看过StackOverflow以及互联网;我找到的最佳解决方案是从

here开始.我已经将我的实现放在下面:

public class ResizableVideoView extends VideoView {

public ResizableVideoView(Context c) {

super(c);

}

private int mVideoWidth = 100;

private int mVideoHeight = 100;

public void changeVideoSize(int width,int height) {

mVideoWidth = width;

mVideoHeight = height;

// not sure whether it is useful or not but safe to do so

getHolder().setFixedSize(width,height);

forceLayout();

invalidate(); // very important,so that onMeasure will be triggered

}

public void onMeasure(int specwidth,int specheight) {

Log.i("onMeasure","On Measure has been called");

setMeasuredDimension(mVideoWidth,mVideoHeight);

}

public void onDraw(Canvas c) {

super.onDraw(c);

Log.i("onDraw","Drawing...");

}

}

视频在Android模拟器和Motorola Droid X上正确调整大小;但在摩托罗拉Droid上,VideoView会调整大小,但VideoView中播放的视频不会调整大小.在摩托罗拉Droid上,如果VideoView设置为比视频播放更大的尺寸,VideoView中会出现黑色背景,视频在VideoView的左上角播放在黑色背景的顶部.

如何在Android中正确调整VideoView的大小?

谢谢,

万斯

### 关于 Android 窗口层级树的概念与实现 在 Android 中,窗口层级树是一个重要的概念,用于描述视图及其子视图之间的层次关系。这种结构允许开发者通过父级和子级的关系来管理复杂的界面布局。 #### 1. 窗口层级树的核心定义 窗口层级树中的节点可以被分为两类:祖先(Ancestor)和后代(Descendant)。其中,“后代”不仅指直接的子节点,还包括多代子孙节点[^2]。这意味着在一个窗口中,任何嵌套的视图都可以被认为是某个顶级视图的后代。 #### 2. 层次结构的作用 Android 的窗口层级树主要用于以下几个方面: - **事件分发**:触摸事件会沿着窗口层级树向下传递到目标视图,并沿相反方向返回处理结果。 - **绘制顺序**:渲染引擎按照层级树的深度优先遍历算法依次绘制各个视图。 - **性能优化**:通过对特定分支进行裁剪或延迟加载,减少不必要的计算开销。 #### 3. 实现细节 Android 使用 `View` 和 `ViewGroup` 类构建了整个 UI 结构。以下是其基本原理: ##### (a) View 和 ViewGroup 的角色 - `View` 是最基本的单元,表示屏幕上的一个矩形区域并负责绘制自己以及响应用户交互。 - `ViewGroup` 则是一种特殊的 `View`,它作为容器容纳其他 `View` 或者 `ViewGroup` 子项形成复杂布局。 ##### (b) 布局过程 当创建一个新的 Activity 时,系统会初始化根级别的 DecorView 并将其设置为主窗口的内容视图。随后经历三个主要阶段完成最终呈现效果: 1. **测量(Measure)** – 计算每个组件所需的尺寸大小; 2. **布局(Layout)** – 定义各部分位置参数; 3. **绘制(Draw)** – 将像素数据提交给 GPU 进行硬件加速显示。 ```java // 示例代码展示如何手动操作 Window Hierarchy Tree public class CustomLayout extends LinearLayout { public CustomLayout(Context context){ super(context); TextView textView = new TextView(getContext()); textView.setText("This is part of the window hierarchy."); addView(textView); // 添加子元素至当前 Layout Button button = new Button(getContext()); button.setText("Click Me"); addView(button); setOrientation(VERTICAL); // 设置排列方向为垂直 } } ``` 上述例子展示了自定义线性布局类继承自标准LinearLayout,并向内部动态添加两个控件实例(TextView & Button),从而扩展了默认行为的同时也体现了Window Hierarchy的实际应用之一——灵活调整UI组成成分的位置关系。 #### 4. 性能考量 为了提效率,在设计大型应用程序时应特别注意避免过度深层次嵌套因为这可能导致更多的重绘次数进而影响整体流畅度;另外合理利用RecyclerView代替ListView等传统列表解决方案也是降低内存占用的有效手段之一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值