我试图在android中编写一个Camera
应用。我想使用SeekBar
放大/缩小相机。这是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
>
<FrameLayout
android:id="@+id/camera_preview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
/>
<SeekBar android:id="@+id/sliderZoom"
android:layout_width="160dp"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_gravity="center"
/>
</LinearLayout>
<RelativeLayout
android:orientation="vertical"
android:layout_width="50dp"
android:layout_height="fill_parent"
android:background="#000000">
<ImageButton
android:layout_height="50dp"
android:layout_width="wrap_content"
android:src="@drawable/flash"
android:scaleType="fitXY"
android:layout_alignParentTop="true"
android:onClick="onFlashClick" />
<ImageButton
android:layout_height="50dp"
android:layout_width="wrap_content"
android:src="@drawable/zoom"
android:scaleType="fitXY"
android:layout_centerInParent="true"
android:onClick="onZoomClick" />
</RelativeLayout>
</LinearLayout>
如果我移除ImageButton
中的任何一个,我的SeekBar
移动顺利。但如果我同时使用ImageButton
,那么它并没有顺利进行。我尝试在portrait
和landscape
模式下运行该应用。两种模式下的问题都是一样的。
我该如何解决?
编辑:根据一些评论,我想添加更多信息。目前,SeekBar
没有事件处理程序。它不会放大或缩小相机。这只是一个简单的SeekBar
&#39;将最大值设置为某个随机整数。对于我的情况,我尝试了5到500.在每种情况下我都有问题。通过平滑移动我的意思是当我尝试用触摸滑动时它应该轻松移动,不应该停止。如果有一个ImageButton
,我可以向左/右滑动SeekBar
指针,没有任何问题。但如果有两个ImageButton
,则指针不会轻易移动。看起来每次指针移动一个单元时,UI线程上会运行一些耗时的操作,从而阻止UI捕获触摸事件。虽然事实是在UI线程中没有耗时的操作。没有为任何类型的计算编写单个函数。我甚至没有在FrameLayout
添加相机预览或相机未初始化
更多编辑:我刚刚发现了一个有趣的事件。如果两个ImageButton
的图像源都是相同的图像(并不重要),那么它的效果非常好。但如果我为两个ImageButton
提供了两个不同的图像,那么它就会引发问题。我希望这些新信息有助于了解正在发生的事情。图像的分辨率为1299x1299,尺寸小于40kb。
答案 0 :(得分:0)
实际上这不是问题。相机缩放级别并非如此。基本上缩放级别是5-7。因此,由于您使用SeekBar作为缩放控制器,这意味着您的搜索栏的最大级别为7(支持)。因此,当您拉动条形时,它会逐级缓冲。 对于您的测试,您可以设置值 seekBar.setMax(30),然后拉出搜索栏。我希望你能顺利完成