我试着把第二个播放器放在一个有圆角的框架内(这个答案和这个答案),但是播放器总是会跳出父框架并绘制视频的完整矩形。
我发现这个解决方案使用GLSurfaceView,但是这个解决方案使用经典的MediaPlayer而不是ExoPlayer。
对于应该具有圆角的布局,可以在布局XML文件中设置以下内容:
app:surface_type="texture_view"
在这里找到了这个解决方案。
使用此功能的缺点主要是性能和电池使用(写在这里):
我应该使用SurfaceView还是TextureView?与TextureView相比,SurfaceView在视频播放方面有许多优点:
大大降低了许多设备的功耗。更精确的帧定时,使视频播放更流畅。播放受DRM保护的内容时支持安全输出。因此,在可能的情况下,SurfaceView应优先于TextureView。仅当SurfaceView不能满足您的需要时,才应使用TextureView。一个例子是,在Android N之前,需要平滑动画或滚动视频表面(请参见如何获得平滑动画/滚动视频?)。对于这种情况,最好仅在SDK_INT小于24(Android N)时使用TextureView,否则使用SurfaceView。
你需要为它创建一个自定义容器。试试这个,把你的玩家视图放在里面。
public class RoundFrameLayout extends FrameLayout {
private final Path clip = new Path();
private int posX;
private int posY;
private int radius;
public RoundFrameLayout(Context context) {
this(context,null);
}
public RoundFrameLayout(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public RoundFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// We can use outlines on 21 and up for anti-aliased clipping.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
setClipToOutline(true);
}
}
@Override
protected void onSizeChanged(int width, int height, int oldWidth, int oldHeight) {
posX = Math.round((float) width / 2);
posY = Math.round((float) height / 2);
// noinspection NumericCastThatLosesPrecision
radius = (int) Math.floor((float) Math.min(width, height) / 2);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
setOutlineProvider(new OutlineProvider(posX, posY, radius));
} else {
clip.reset();
clip.addCircle(posX, posY, radius, Direction.CW);
}
}
@Override
protected void dispatchDraw(Canvas canvas) {
// Not needed on 21 and up since we're clipping to the outline instead.
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
canvas.clipPath(clip);
}
super.dispatchDraw(canvas);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
// Don't pass touch events that occur outside of our clip to the children.
float distanceX = Math.abs(event.getX() - posX);
float distanceY = Math.abs(event.getY() - posY);
double distance = Math.hypot(distanceX, distanceY);
return distance > radius;
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
static class OutlineProvider extends ViewOutlineProvider {
final int left;
final int top;
final int right;
final int bottom;
OutlineProvider(int posX, int posY, int radius) {
left = posX - radius;
top = posY - radius;
right = posX + radius;
bottom = posY + radius;
}
@Override
public void getOutline(View view, Outline outline) {
outline.setOval(left, top, right, bottom);
}
}
}
问题内容: 因此,我试图绘制一个标签,其中包含一个显示圆圈的图标。圆圈最初将被填充为红色,然后根据我按下的三个按钮中的哪个按钮,将使用重绘将其更改为绿色,蓝色或红色。 这是我到目前为止的内容: 我的问题是,我不知道在paintIcon中如何传递Graphics g。有其他方法可以做到这一点吗?我对此表示感谢。 问题答案: 图标的大小为(10,10)。50,超出了Icon的范围。相对于图标完成绘制,
问题内容: 我正在创建一个应用程序,该应用程序在gridPane的每个单元格内随机显示(不同颜色的)圆圈。 我想要做的是创建一个“随机播放”按钮,以随机更改gridPane中每个圆的位置。但是,我一直遇到很多问题。 这是我到目前为止所拥有的。我的两个类(尚未添加XML文件): 控制器类 主班 问题答案: 这是一个示例,演示了如何在。如果添加了一个,你可以删除从。然后,您可以随机播放。最后,您可以将
我有一组数据,我正在分散地绘制。当我将鼠标滑过其中一个圆圈时,我希望它弹出数据(比如x、y值,可能更多)。以下是我尝试使用的: 我想我需要更多关于输入什么数据的信息?
本文向大家介绍Android中TextView显示圆圈背景或设置圆角的方法,包括了Android中TextView显示圆圈背景或设置圆角的方法的使用技巧和注意事项,需要的朋友参考一下 前言 在我们学习android这么久,而且使用TextView那么长时间,我们一直没有用过给TextView添加背景,或者是给TextView添加添加边框,以及怎么样设置TextView的形状。今天在写代码的时候就用
我正在创建一个应用程序,在一个gridPane的每个单元格内随机显示圆形(不同颜色)。 我想做的是创建一个“shuffle”按钮,在gridPane中随机改变每个圆的位置。然而,我不断遇到一大堆问题。 这是我到目前为止所拥有的。我的两个类(没有添加XML文件): 控制器类 主类
我在一些项目上使用字体真棒,但我有一些事情,我想用字体真棒图标做,我可以很容易地调用这样的图标: 所有图标是否可能始终处于带边框的圆形中?像这样,我有一张照片: 使用 会产生效果,但问题是图标总是比旁边的文本或元素大,有什么解决方案吗?