安卓引用资源出现 error: resource android:drawable/.....is private.

本文介绍了一种常见的资源引用错误——私有资源被尝试公开访问的问题,并提供了一个简单的解决方案:通过将“@android”替换为“@*android”的方式来解决这一问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从错误信息可以看出,该资源没有被公开是私有的。导致无法被引用。
我们可以直接将“@android”改成“@*android”
问题解决。。。。

<?xml version="1.0" encoding="utf-8" standalone="no"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="preferExternal" package="com.dw.Dating.lua" platformBuildVersionCode="25" platformBuildVersionName="7.1.1"> <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:xlargeScreens="true"/> <uses-feature android:glEsVersion="0x20000"/> A <uses-permission android:name="android.permission.INTERNET"/> <uses-feature android:name="android.hardware.touchscreen" android:required="false"/> <uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false"/> <uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_LOGS"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.webkit.permission.PLUGIN"/> <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/> <uses-permission android:name="android.permission.VIBRATE"/> <meta-data android:name="android.support.VERSION" android:value="25.3.1"/> <application android:hardwareAccelerated="false" android:icon="@drawable/app_icon" android:isGame="true" android:label="@string/app_name" android:name="com.dw.Dating.wxapi.App"> <meta-data android:name="URL_VALUE" android:value="http://192.168.111.88"/> <meta-data android:name="CHANNEL" android:value="AgentID-0"/> <meta-data android:name="FW_VALUE" android:value="FW-30855784"/> <meta-data android:name="AppID" android:value="wx401c37330dd3e92e"/> <activity android:configChanges="locale|fontScale|keyboard|keyboardHidden|mcc|mnc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|touchscreen|uiMode" android:label="@string/app_name" android:launchMode="singleTask" android:name="com.dw.Dating.wxapi.MainActivity" android:screenOrientation="landscape"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LEANBACK_LAUNCHER"/> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true"/> <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false"/> </activity> <activity android:configChanges="keyboardHidden|orientation|screenSize" android:launchMode="singleTask" android:name="com.fanwei.jubaosdk.cashier.CashierActivity" android:theme="@style/FanweiDialogActivityTheme"/> <activity android:configChanges="keyboardHidden|orientation|screenSize" android:launchMode="singleTop" android:name="com.fanwei.jubaosdk.wap.WapActivity" android:screenOrientation="portrait" android:theme="@style/FanweiActivityTheme"/> <provider android:authorities="com.dw.Dating.lua.fileProvider" android:exported="false" android:grantUriPermissions="true" android:name="android.support.v4.content.FileProvider"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths_fanwei"/> </provider> <activity android:name="com.pay.sdk.usage.PayActivity" android:screenOrientation="portrait"/> <activity android:name="sdk.pay.PayWebViewActivity" android:screenOrientation="portrait"/> <activity android:name="com.switfpass.pay.activity.QQWapPayWebView" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar"/> <activity android:exported="true" android:launchMode="singleTop" android:name="com.dw.Dating.lua.wxapi.WXEntryActivity" android:theme="@android:style/Theme.NoDisplay"/> <meta-data android:name="UMENG_APPKEY" android:value="111"/> <meta-data android:name="UMENG_CHANNEL" android:value="Test"/> </application> </manifest> 在unity5.3.3使用
最新发布
07-19
Shuhai.java:package com.jd.projects.wlw.shuhai; import android.app.AlertDialog; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.FrameLayout; import android.widget.GridLayout; import android.widget.ImageView; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import com.android.volley.AuthFailureError; import com.android.volley.DefaultRetryPolicy; import com.android.volley.NoConnectionError; import com.android.volley.ParseError; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.ServerError; import com.android.volley.TimeoutError; import com.android.volley.VolleyError; import com.android.volley.toolbox.JsonObjectRequest; import com.android.volley.toolbox.Volley; import com.bumptech.glide.Glide; import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import com.jd.projects.wlw.R; public class Shuhai extends AppCompatActivity { private TextView nAme; private ListView dateList; private String currentStationId; private String stationName; // private static final boolean TEST_MODE = false; // private static final String TEST_STATION_ID = "20220811001"; // private static final String TEST_STATION_NAME = "测试监测点"; private GridLayout imageGrid; private ProgressBar progressBar; private RequestQueue requestQueue; private static final String REQUEST_TAG = "ShuhaiRequest"; private String currentDate; private Button btnYear, btnMonth; private int currentYear; private int currentMonth; private Button deviceLocationBtn; private Button spButton; private ZoomImageView1 fullImageView; // 用于全屏显示 private FrameLayout fullscreenContainer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { setContentView(R.layout.shuhai); imageGrid = (GridLayout) findViewById(R.id.image_grid); fullscreenContainer = (FrameLayout) findViewById(R.id.fullscreen_container); fullImageView = (ZoomImageView1) findViewById(R.id.fullscreen_imageview); // Log.d("GkdActivity", "Activity created"); } catch (Exception e) { // Log.e("GkdActivity", "Error setting content view", e); Toast.makeText(this, "加载界面失败", Toast.LENGTH_SHORT).show(); finish(); return; } // 初始化WebView initFullscreenContainer(); // 控件初始化区域 View fanHui = findViewById(R.id.fanHui); fanHui.setOnClickListener(v -> finish()); nAme = (TextView) findViewById(R.id.nAme); dateList = (ListView) findViewById(R.id.date_list); imageGrid = (GridLayout) findViewById(R.id.image_grid); progressBar = (ProgressBar) findViewById(R.id.progressBar); // 新增设备定位按钮初始化 Button deviceLocationBtn = (Button) findViewById(R.id.device_location); deviceLocationBtn.setOnClickListener(v -> { Intent resultIntent = new Intent(); resultIntent.putExtra("action", "show_location"); resultIntent.putExtra("site_id", currentStationId); setResult(RESULT_OK, resultIntent); finish(); }); // Volley请求队列初始化 requestQueue = Volley.newRequestQueue(this); // 年月选择初始化 btnYear = (Button) findViewById(R.id.btn_year); btnMonth = (Button) findViewById(R.id.btn_month); initYearMonthSelection(); // 数据处理 handleIntentData(); // Log.d("GkdActivity", "Station ID: " + currentStationId); // Log.d("GkdActivity", "Station Name: " + stationName); // 名称显示处理 if (stationName != null) { nAme.setText(stationName); } else { nAme.setText("监测点信息"); } // 加载初始数据 loadDatesForCurrentMonth(); spButton = (Button) findViewById(R.id.Sp); spButton.setOnClickListener(v -> { // 创建跳转到ShuhaiSPActivity的Intent Intent intent = new Intent(Shuhai.this, ShuhaiSp.class); // 传递当前监测点信息 if (currentStationId != null) { intent.putExtra("nsiteid", currentStationId); } if (stationName != null) { intent.putExtra("sitealiasname", stationName); } // 添加额外数据(如果需要) intent.putExtra("currentDate", currentDate); intent.putExtra("currentYear", currentYear); intent.putExtra("currentMonth", currentMonth); // 启动新Activity startActivity(intent); }); } private void initFullscreenContainer() { // 设置关闭全屏的按钮事件 findViewById(R.id.close_fullscreen).setOnClickListener(v -> { fullscreenContainer.setVisibility(View.GONE); }); } private void initYearMonthSelection() { Calendar calendar = Calendar.getInstance(); currentYear = calendar.get(Calendar.YEAR); currentMonth = calendar.get(Calendar.MONTH) + 1; // 转换为1-12格式 updateYearMonthButtons(); btnYear.setOnClickListener(v -> showYearPicker()); btnMonth.setOnClickListener(v -> showMonthPicker()); } private void updateYearMonthButtons() { btnYear.setText(String.valueOf(currentYear)); btnMonth.setText(String.format("%02d", currentMonth)); } private void showYearPicker() { final List<Integer> years = new ArrayList<>(); int startYear = currentYear - 9; int endYear = currentYear + 9; for (int i = startYear; i <= endYear; i++) years.add(i); new AlertDialog.Builder(this) .setTitle("选择年份") .setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, years), (dialog, which) -> { currentYear = years.get(which); updateYearMonthButtons(); loadDatesForCurrentMonth(); }) .show(); } private void showMonthPicker() { new AlertDialog.Builder(this) .setTitle("选择月份") .setItems(new String[]{"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"}, (dialog, which) -> { currentMonth = which + 1; updateYearMonthButtons(); loadDatesForCurrentMonth(); }) .show(); } private void loadDatesForCurrentMonth() { try { // 使用动态获取的站点ID String deviceCode = URLEncoder.encode(currentStationId, "UTF-8"); Calendar cal = Calendar.getInstance(); cal.set(currentYear, currentMonth - 1, 1, 0, 0, 0); String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cal.getTime()); cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cal.getTime()); String url = "http://nyzbwlw.com/situation/http/device/mouse/getMouseList" + "?deviceCode=" + deviceCode + "&startTime=" + URLEncoder.encode(startTime, "UTF-8") + "&endTime=" + URLEncoder.encode(endTime, "UTF-8") + "&size=10000"; progressBar.setVisibility(View.VISIBLE); JsonObjectRequest request = new JsonObjectRequest( Request.Method.GET, url, null, this::handleDateResponse, this::handleDateError); request.setRetryPolicy(new DefaultRetryPolicy(15000, 3, 1.5f)); requestQueue.add(request); } catch (Exception e) { progressBar.setVisibility(View.GONE); Toast.makeText(this, "时间参数错误", Toast.LENGTH_SHORT).show(); } } private void handleIntentData() { Intent intent = getIntent(); if (intent != null) { currentStationId = intent.getStringExtra("nsiteid"); stationName = intent.getStringExtra("sitealiasname"); // Log.d("GkdActivity", "Received nsiteid: " + currentStationId); // Log.d("GkdActivity", "Received sitealiasname: " + stationName); if (currentStationId == null || currentStationId.isEmpty()) { Toast.makeText(this, "未获取到监测点ID", Toast.LENGTH_SHORT).show(); setResult(RESULT_CANCELED); supportFinishAfterTransition(); return; } } else { Toast.makeText(this, "未获取到启动参数", Toast.LENGTH_SHORT).show(); finish(); } } private void handleDateResponse(JSONObject response) { progressBar.setVisibility(View.GONE); try { if (!response.has("code") || response.getInt("code") != 100) { handleDataError("服务器响应异常"); return; } JSONObject data = response.optJSONObject("data"); if (data == null || !data.has("list")) { handleDataError("数据结构异常"); return; } Set<String> dateSet = new HashSet<>(); JSONArray list = data.getJSONArray("list"); for (int i = 0; i < list.length(); i++) { String time = list.getJSONObject(i).optString("collectionTime", "") .replace("T", " "); // 处理可能存在的ISO格式时间 if (time.length() >= 10) { dateSet.add(time.substring(0, 10)); } } List<String> dates = new ArrayList<>(dateSet); Collections.sort(dates, Collections.reverseOrder()); dateList.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, dates)); dateList.setOnItemClickListener((parent, view, position, id) -> { currentDate = dates.get(position); loadImages(); }); if (!dates.isEmpty()) { currentDate = dates.get(0); loadImages(); } } catch (JSONException e) { handleDataError("数据格式错误"); } } private void loadImages() { progressBar.setVisibility(View.VISIBLE); try { String startTime = currentDate + " 00:00:00"; String endTime = currentDate + " 23:59:59"; String url = "http://nyzbwlw.com/situation/http/device/mouse/getMouseList" + "?deviceCode=" + URLEncoder.encode(currentStationId, "UTF-8") + "&startTime=" + URLEncoder.encode(startTime, "UTF-8") + "&endTime=" + URLEncoder.encode(endTime, "UTF-8"); JsonObjectRequest request = new JsonObjectRequest( Request.Method.GET, url, null, this::handleImageResponse, this::handleImageError); request.setRetryPolicy(new DefaultRetryPolicy(15000, 3, 1.5f)); requestQueue.add(request); } catch (UnsupportedEncodingException e) { progressBar.setVisibility(View.GONE); Toast.makeText(this, "时间参数错误", Toast.LENGTH_SHORT).show(); } } private void handleImageResponse(JSONObject response) { progressBar.setVisibility(View.GONE); try { if (response.getInt("code") == 100) { JSONArray list = response.getJSONObject("data").getJSONArray("list"); List<String> imageUrls = new ArrayList<>(); List<String> imageTimes = new ArrayList<>(); for (int i = 0; i < list.length(); i++) { JSONObject item = list.getJSONObject(i); imageUrls.add(item.getString("pictureUrl")); String rawTime = item.optString("collectionTime", ""); imageTimes.add(rawTime.substring(11, 19)); } // 使用新的适配器方式 updateImageGrid(imageUrls, imageTimes); } } catch (JSONException e) { handleDataError("图片数据解析失败"); } } // 替换RecyclerView为动态添加视图 private void updateImageGrid(List<String> imageUrls, List<String> imageTimes) { imageGrid.removeAllViews(); // 清除旧视图 imageGrid.setColumnCount(2); // 2列网格 int spacing = getResources().getDimensionPixelSize(R.dimen.grid_spacing); int availableWidth = getResources().getDisplayMetrics().widthPixels - getResources().getDimensionPixelSize(R.dimen.left_nav_width); // 新计算公式:总可用宽度 - 4个间隔(左右各1 + 中间2) int imageSize = (availableWidth - spacing * 4) / 2; int textHeight = (int) (30 * getResources().getDisplayMetrics().density); for (int i = 0; i < imageUrls.size(); i++) { View itemView = LayoutInflater.from(this).inflate(R.layout.grid_item_image, null); ImageView imageView = (ImageView) itemView.findViewById(R.id.image_view); TextView fileNameText = (TextView) itemView.findViewById(R.id.file_name); String displayTime = imageTimes.get(i) != null ? imageTimes.get(i) : "--:--:--"; fileNameText.setText(displayTime); // 设置图片大小 imageView.getLayoutParams().width = imageSize; imageView.getLayoutParams().height = imageSize; // 使用Glide加载图片并添加错误处理 final String url = imageUrls.get(i); Glide.with(this) .load(url) .override(imageSize, imageSize) .centerCrop() .placeholder(R.drawable.placeholder) .error(R.drawable.error_image) .into(imageView); // 设置点击事件 itemView.setOnClickListener(v -> showFullscreenImage(url)); // 添加视图到网格 // GridLayout.Spec rowSpec = GridLayout.spec(i / 2); // GridLayout.Spec colSpec = GridLayout.spec(i % 2); GridLayout.LayoutParams params = new GridLayout.LayoutParams( GridLayout.spec(i / 2), GridLayout.spec(i % 2) ); params.width = imageSize; params.height = imageSize + textHeight; params.setMargins(spacing, spacing, spacing, spacing); imageGrid.addView(itemView, params); } } private void handleDateError(VolleyError error) { progressBar.setVisibility(View.GONE); handleNetworkError(error, "日期加载失败"); } private void handleImageError(VolleyError error) { progressBar.setVisibility(View.GONE); handleNetworkError(error, "图片加载失败"); } private void handleNetworkError(VolleyError error, String prefix) { String message = prefix + ": "; if (error instanceof TimeoutError) { message += "请求超时(请检查网络)"; } else if (error instanceof NoConnectionError) { message += "网络未连接"; } else if (error instanceof ServerError) { message += "服务器错误(HTTP " + error.networkResponse.statusCode + ")"; } else if (error instanceof AuthFailureError) { message += "认证失败(请检查权限)"; } else if (error instanceof ParseError) { message += "数据解析异常(请检查API格式)"; } else { message += "未知错误"; } Toast.makeText(this, message, Toast.LENGTH_LONG).show(); } private void handleDataError(String message) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); } private void showFullscreenImage(String imageUrl) { fullscreenContainer.setVisibility(View.VISIBLE); progressBar.setVisibility(View.VISIBLE); // fullImageView.resetMatrix(); // 使用Glide加载全屏图片 Glide.with(this) .load(imageUrl) .listener(new RequestListener<String, GlideDrawable>() { @Override public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) { progressBar.setVisibility(View.GONE); // 显示错误图片 fullImageView.setImageResource(R.drawable.error_image); return true; // 消费异常事件 } @Override public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { // 延迟执行确保视图已布局 fullImageView.post(() -> { fullImageView.resetMatrix(); progressBar.setVisibility(View.GONE); }); return false; } }) .error(R.drawable.error_image) .into(fullImageView); } public void closeFullscreen(View view) { fullscreenContainer.setVisibility(View.GONE); } @Override protected void onStop() { super.onStop(); if (requestQueue != null) { requestQueue.cancelAll(REQUEST_TAG); } } } shuhai.xml:<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/gradient_background"> <!-- 标题栏 --> <RelativeLayout android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?android:attr/actionBarSize" android:background="#44bd32"> <Button android:id="@+id/fanHui" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginStart="8dp" android:layout_marginEnd="8dp" android:background="@android:color/transparent" android:foreground="?android:attr/selectableItemBackground" android:text="返回" android:textColor="@android:color/white" android:textSize="16sp" /> <!-- 修改后的标题文字模块 --> <TextView android:id="@+id/nAme" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:ellipsize="end" android:gravity="center" android:maxLines="1" android:paddingStart="60dp" android:paddingEnd="60dp" android:text="图片" android:textColor="@android:color/white" android:textSize="19sp" /> <Button android:id="@+id/Sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginStart="365dp" android:layout_marginEnd="8dp" android:background="@android:color/transparent" android:foreground="?android:attr/selectableItemBackground" android:text="视频" android:textColor="@android:color/white" android:textSize="16sp" /> </RelativeLayout> <!-- 底部按钮 --> <LinearLayout android:id="@+id/footer_buttons" android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" android:background="@android:color/transparent" android:orientation="horizontal"> <Button android:id="@+id/device_location" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="设备定位" android:textSize="19sp" android:background="#44bd32" android:textColor="@android:color/white" /> </LinearLayout> <!-- 左侧导航 --> <LinearLayout android:id="@+id/left_navigation" android:layout_width="120dp" android:layout_height="match_parent" android:layout_below="@id/toolbar" android:layout_above="@id/footer_buttons" android:orientation="vertical" android:background="@android:color/white" android:padding="8dp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="根据年月查看数据" android:textColor="@android:color/black" android:textSize="16sp" android:gravity="center" android:padding="8dp"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="4dp"> <Button android:id="@+id/btn_year" android:layout_width="0dp" android:layout_height="40dp" android:layout_weight="1" android:background="@drawable/button_border" android:textSize="16sp" android:layout_marginEnd="4dp"/> <Button android:id="@+id/btn_month" android:layout_width="0dp" android:layout_height="40dp" android:layout_weight="1" android:background="@drawable/button_border" android:textSize="16sp" android:layout_marginStart="4dp"/> </LinearLayout> <ProgressBar android:id="@+id/progressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:visibility="gone" /> <ListView android:id="@+id/date_list" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:divider="#BDBDBD" android:dividerHeight="1dp"/> </LinearLayout> <!-- 图片网格容器(添加滚动支持) --> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@id/footer_buttons" android:layout_below="@id/toolbar" android:layout_toEndOf="@id/left_navigation" android:background="@android:color/white" android:fillViewport="true" android:padding="0dp"> <GridLayout android:id="@+id/image_grid" android:layout_width="match_parent" android:layout_height="wrap_content" android:columnCount="2" android:padding="0dp" /> </ScrollView> <!-- 全屏容器(使用ImageView替代WebView) --> <FrameLayout android:id="@+id/fullscreen_container" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" android:background="@android:color/black"> <com.jd.projects.wlw.shuhai.ZoomImageView1 android:id="@+id/fullscreen_imageview" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="matrix"/> <ImageButton android:id="@+id/close_fullscreen" android:layout_width="60dp" android:layout_height="60dp" android:layout_gravity="top|end" android:layout_margin="16dp" android:src="@drawable/ic_close_white" android:background="@drawable/round_button_bg" android:onClick="closeFullscreen"/> </FrameLayout> </RelativeLayout> 解决shuhai.xml中布局文件中android:id="@+id/Sp"视频按钮没有显示在手机实时画面中
06-27
停止云台控制 接口功能 设备停止云台控制 请求地址 https://open.ys7.com/api/lapp/device/ptz/stop 请求方式 POST 子账户token请求所需最小权限 "Permission":"Ptz" "Resource":"Cam:序列号:通道号" 请求参数 参数名 类型 描述 是否必选 accessToken String 授权过程获取的access_token Y deviceSerial String 设备序列号,存在英文字母的设备序列号,字母需为大写 Y channelNo int 通道号 Y direction int 操作命令:0-上,1-下,2-左,3-右,4-左上,5-左下,6-右上,7-右下,8-放大,9-缩小,10-近焦距,11-远焦距,16-自动控制 N 提示:建议停止云台接口带方向参数。 HTTP请求报文 POST /api/lapp/device/ptz/stop HTTP/1.1 Host: open.ys7.com Content-Type: application/x-www-form-urlencoded accessToken=at.25ne3gkr6fa7coh34ys0fl1h9hryc2kr&deviceSerial=568261888&channelNo=1&direction=1 返回数据 { "code": "200", "msg": "操作成功!" } 开始云台控制 接口功能 对设备进行开始云台控制,开始云台控制之后必须先调用停止云台控制接口才能进行其他操作,包括其他方向的云台转动 请求地址 https://open.ys7.com/api/lapp/device/ptz/start 请求方式 POST 子账户token请求所需最小权限 "Permission":"Ptz" "Resource":"Cam:序列号:通道号" 请求参数 参数名 类型 描述 是否必选 accessToken String 授权过程获取的access_token Y deviceSerial String 设备序列号,存在英文字母的设备序列号,字母需为大写 Y channelNo int 通道号 Y direction int 操作命令:0-上,1-下,2-左,3-右,4-左上,5-左下,6-右上,7-右下,8-物理放大,9-物理缩小,10-调整近焦距,11-调整远焦距,16-自动控制 Y speed int 云台速度:0-慢,1-适中,2-快,海康设备参数不可为0 Y HTTP请求报文 POST /api/lapp/device/ptz/start HTTP/1.1 Host: open.ys7.com Content-Type: application/x-www-form-urlencoded accessToken=at.4g01l53x0w22xbp30ov33q44app1ns9m&deviceSerial=502608888&channelNo=1&direction=2&speed=1 返回数据 { "code": "200", "msg": "操作成功!" } 依据上述开发文档在下面代码中实现点击"@+id/ptz_left_btn"控制云台向左转动,点击"@+id/ptz_right_btn"控制云台向右转动,点击"@+id/ptz_top_btn"控制云台向上转动,点击"@+id/ptz_bottom_btn"控制云台向下转动,点击"@+id/zoom_add"控制云台物理放大,点击"@+id/zoom_reduce"控制云台物理缩小,设置云台速度为1-适中,其它不变。MainActivity.java:package com.videogo.ui.login; import android.content.res.Configuration; import android.content.pm.ActivityInfo; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import com.videogo.exception.BaseException; import com.videogo.exception.ErrorCode; import com.videogo.openapi.EZConstants; import com.videogo.openapi.EZOpenSDK; import com.videogo.openapi.EZPlayer; import ezviz.ezopensdk.R; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.LinearLayout; import android.widget.ImageButton; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback, Handler.Callback { private static final String TAG = "EZPreview"; private static final int MSG_VIDEO_SIZE_CHANGED = 1; private static final int MSG_REALPLAY_PLAY_SUCCESS = 2001; private static final int MSG_REALPLAY_PLAY_FAIL = 2002; private static final int MSG_SHOW_STREAM_TYPE = 3001; // 新增消息类型 // 接收的参数键 private static final String KEY_APPKEY = "appkey"; private static final String KEY_SERIAL = "serial"; private static final String KEY_VERIFYCODE = "VerifyCode"; private static final String KEY_ACCESSTOKEN = "accessToken"; private static final String KEY_CAMERANO = "cameraNo"; private boolean mIsPlaying = false; private EZPlayer mEZPlayer; private SurfaceView mSurfaceView; private SurfaceHolder mSurfaceHolder; private ProgressBar mLiveProgressBar; private RelativeLayout mRlControl; private LinearLayout mLlHc; private ImageButton mIbRotate2; // 从Intent中获取的参数 private String mAppKey; private String mDeviceSerial; private String mVerifyCode; private String mAccessToken; private int mCameraNo = 0; // 默认通道号0 private Handler mHandler; private boolean mP2PEnabled = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activitymain); mHandler = new Handler(this); // 1. 从Intent中获取参数 extractParametersFromIntent(); // 2. 初始化UI initUI(); initOrientationSensitiveViews(); View fanHui = findViewById(R.id.back); fanHui.setOnClickListener(v -> finish()); // 3. 初始化SDK并创建播放器 initSDKAndCreatePlayer(); } private void initOrientationSensitiveViews() { mLiveProgressBar = findViewById(R.id.liveProgressBar); mRlControl = findViewById(R.id.rl_control); mLlHc = findViewById(R.id.ll_hc); mIbRotate2 = findViewById(R.id.ib_rotate2); // 初始状态显示加载 if (mLiveProgressBar != null) { mLiveProgressBar.setVisibility(View.VISIBLE); } // 初始根据方向更新UI updateLayoutByOrientation(); } @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); // 方向变化时重新初始化视图 initOrientationSensitiveViews(); updateLayoutByOrientation(); } @Override protected void onResume() { super.onResume(); if (mLiveProgressBar != null) { if (mIsPlaying) { mLiveProgressBar.setVisibility(View.GONE); } else { mLiveProgressBar.setVisibility(View.VISIBLE); } } } private void updateLayoutByOrientation() { int orientation = getResources().getConfiguration().orientation; if (orientation == Configuration.ORIENTATION_PORTRAIT) { // 竖屏模式 mRlControl.setVisibility(View.VISIBLE); mLlHc.setVisibility(View.GONE); mIbRotate2.setVisibility(View.GONE); } else { // 横屏模式 mRlControl.setVisibility(View.GONE); mLlHc.setVisibility(View.VISIBLE); mIbRotate2.setVisibility(View.VISIBLE); } } /** * 从Intent中提取传递的参数 */ private void extractParametersFromIntent() { Bundle extras = getIntent().getExtras(); if (extras != null) { mAppKey = extras.getString(KEY_APPKEY, ""); mDeviceSerial = extras.getString(KEY_SERIAL, ""); mVerifyCode = extras.getString(KEY_VERIFYCODE, ""); mAccessToken = extras.getString(KEY_ACCESSTOKEN, ""); mCameraNo = extras.getInt(KEY_CAMERANO, 0); Log.d(TAG, "Received parameters:"); Log.d(TAG, "AppKey: " + mAppKey); Log.d(TAG, "DeviceSerial: " + mDeviceSerial); Log.d(TAG, "VerifyCode: " + mVerifyCode); Log.d(TAG, "AccessToken: " + mAccessToken); Log.d(TAG, "CameraNo: " + mCameraNo); } else { Log.e(TAG, "No parameters received from intent"); // 如果没有参数,可以显示错误信息并退出 finish(); } } /** * 初始化UI组件 */ private void initUI() { mSurfaceView = findViewById(R.id.realplay_sv); if (mSurfaceView != null) { mSurfaceHolder = mSurfaceView.getHolder(); mSurfaceHolder.addCallback(this); } else { Log.e(TAG, "SurfaceView not found with ID realplay_sv"); } } /** * 初始化SDK并创建播放器 */ private void initSDKAndCreatePlayer() { try { // 1. 初始化SDK EZOpenSDK.initLib(getApplication(), mAppKey); EZOpenSDK.getInstance().setAccessToken(mAccessToken); // +++ 开启P2P取流方式 +++ EZOpenSDK.enableP2P(true); // 开启P2P取流 Log.d(TAG, "P2P取流已启用"); mP2PEnabled = true; // 2. 创建播放器 createPlayer(); } catch (Exception e) { Log.e(TAG, "SDK初始化失败", e); Toast.makeText(this, "SDK初始化失败", Toast.LENGTH_SHORT).show(); } } /** * 创建播放器并开始播放 */ private void createPlayer() { try { // 1. 创建播放器实例 mEZPlayer = EZOpenSDK.getInstance().createPlayer(mDeviceSerial, mCameraNo); // 2. 配置播放器 mEZPlayer.setHandler(mHandler); if (mSurfaceHolder != null) { mEZPlayer.setSurfaceHold(mSurfaceHolder); } if (mVerifyCode != null && !mVerifyCode.isEmpty()) { mEZPlayer.setPlayVerifyCode(mVerifyCode); } // 3. 开始播放 mEZPlayer.startRealPlay(); mIsPlaying = true; // 标记为正在播放 } catch (Exception e) { Log.e(TAG, "Player creation failed", e); mIsPlaying = false; // 标记为未播放 } } // 处理屏幕旋转按钮点击 public void changeScreen(View view) { Log.d(TAG, "Change screen orientation requested"); int currentOrientation = getResources().getConfiguration().orientation; if (currentOrientation == Configuration.ORIENTATION_PORTRAIT) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } else { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } // 更新UI布局 updateLayoutByOrientation(); } // Surface回调接口实现 @Override public void surfaceCreated(@NonNull SurfaceHolder holder) { if (mEZPlayer != null) { mEZPlayer.setSurfaceHold(holder); } } @Override public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {} @Override public void surfaceDestroyed(@NonNull SurfaceHolder holder) { if (mEZPlayer != null) { mEZPlayer.setSurfaceHold(null); } } @Override protected void onStop() { super.onStop(); if (mEZPlayer != null) { mEZPlayer.stopRealPlay(); mIsPlaying = false; // 标记为已停止 } } @Override protected void onDestroy() { super.onDestroy(); // +++移除Handler回调避免内存泄漏 +++ if (mHandler != null) { mHandler.removeCallbacksAndMessages(null); } if (mEZPlayer != null) { mEZPlayer.release(); mEZPlayer = null; } } // Handler回调处理播放状态 @Override public boolean handleMessage(@NonNull Message msg) { Log.d(TAG, "handleMessage: " + msg.what); switch (msg.what) { case MSG_VIDEO_SIZE_CHANGED: break; case MSG_REALPLAY_PLAY_SUCCESS: Log.i(TAG, "播放成功"); mIsPlaying = true; // +++ 关键修改:获取并显示取流方式 +++ int streamType = mEZPlayer.getStreamFetchType(); String streamTypeName = getStreamTypeName(streamType); Log.d(TAG, "当前取流方式: " + streamTypeName); // 发送消息显示取流方式 Message showMsg = new Message(); showMsg.what = MSG_SHOW_STREAM_TYPE; showMsg.obj = streamTypeName; mHandler.sendMessage(showMsg); runOnUiThread(() -> { if (mLiveProgressBar != null) { mLiveProgressBar.setVisibility(View.GONE); } }); break; case MSG_REALPLAY_PLAY_FAIL: Log.e(TAG, "播放失败"); mIsPlaying = false; runOnUiThread(() -> { if (mLiveProgressBar != null) { mLiveProgressBar.setVisibility(View.VISIBLE); } }); BaseException error = (BaseException) msg.obj; int errorCode = error.getErrorCode(); if (errorCode == ErrorCode.ERROR_INNER_VERIFYCODE_NEED || errorCode == ErrorCode.ERROR_INNER_VERIFYCODE_ERROR) { mVerifyCode = "123456"; if (mEZPlayer != null) { mEZPlayer.setPlayVerifyCode(mVerifyCode); mEZPlayer.startRealPlay(); } } else { Log.e(TAG, "播放失败,错误码: " + errorCode); } break; // +++ 新增:显示取流方式 +++ case MSG_SHOW_STREAM_TYPE: String type = (String) msg.obj; Toast.makeText(MainActivity.this, "取流方式: " + type + (mP2PEnabled ? " (P2P已启用)" : ""), Toast.LENGTH_LONG).show(); break; } return true; } private String getStreamTypeName(int type) { switch (type) { case 0: return "流媒体"; case 1: return "P2P"; case 2: return "内网直连"; case 4: return "云存储"; default: return "未知(" + type + ")"; } } } activitymain.xml:<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff2f2f2" tools:context="com.videogo.ui.login.MainActivity"> <RelativeLayout android:id="@+id/ra_title" android:layout_width="match_parent" android:layout_height="44dp" android:background="@mipmap/title_bg"> <TextView android:id="@+id/titlename" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_gravity="center" android:text="易丰视频监控" android:textColor="@android:color/white" android:textSize="18sp" /> <ImageButton android:id="@+id/back" android:layout_width="40dp" android:layout_height="match_parent" android:background="@null" android:contentDescription="@null" android:paddingLeft="10dp" android:src="@mipmap/img_back" /> <Button android:id="@+id/huifang" android:layout_width="50dp" android:layout_height="match_parent" android:layout_alignParentRight="true" android:layout_marginRight="65dp" android:background="@drawable/gps_select" android:contentDescription="@null" android:scaleType="centerInside" android:src="@mipmap/ic_size_sel" android:text="回放" android:textColor="@color/white" android:textSize="18sp" /> <ImageButton android:id="@+id/ib_rotate" android:layout_width="50dp" android:layout_height="match_parent" android:layout_alignParentRight="true" android:layout_marginRight="6dp" android:background="@drawable/gps_select" android:contentDescription="@null" android:onClick="changeScreen" android:scaleType="centerInside" android:src="@mipmap/ic_size_sel" /> </RelativeLayout> <RelativeLayout android:id="@+id/rl_control" android:layout_width="match_parent" android:layout_height="266dp" android:layout_alignParentBottom="true" android:visibility="visible"> <LinearLayout android:id="@+id/ll_center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_centerHorizontal="true" android:background="@mipmap/ycjk_yp" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ycjk_kb1" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ycjk_kb2" /> <ImageButton android:id="@+id/left_up" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@null" android:visibility="gone" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ycjk_kb3" /> </LinearLayout> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ycjk_kb4" /> </LinearLayout> <ImageButton android:id="@+id/ptz_top_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/nnew_video_up" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ycjk_kb1" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ycjk_kb3" /> <ImageButton android:id="@+id/right_up" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@null" android:visibility="gone" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ycjk_kb2" /> </LinearLayout> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ycjk_kb4" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent"> <ImageButton android:id="@+id/ptz_left_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/nnew_video_left" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ycjk_zj" /> <ImageButton android:id="@+id/ptz_right_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/nnew_video_right" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ycjk_kb4" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ycjk_kb2" /> <ImageButton android:id="@+id/left_down" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@null" android:visibility="gone" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ycjk_kb3" /> </LinearLayout> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ycjk_kb1" /> </LinearLayout> <ImageButton android:id="@+id/ptz_bottom_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/nnew_video_down" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ycjk_kb4" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ycjk_kb3" /> <ImageButton android:id="@+id/right_down" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@null" android:visibility="gone" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ycjk_kb2" /> </LinearLayout> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ycjk_kb1" /> </LinearLayout> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_toLeftOf="@id/ll_center" android:gravity="center" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> <ImageButton android:id="@+id/focus_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/video_more1" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="焦距 +" android:textColor="@color/black" android:textSize="16dp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> <ImageButton android:id="@+id/guangquan_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/video_more3" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="光圈 +" android:textColor="@color/black" android:textSize="16dp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> <ImageButton android:id="@+id/zoom_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/video_more5" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="变倍 +" android:textColor="@color/black" android:textSize="16dp" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_toRightOf="@id/ll_center" android:gravity="center" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> <ImageButton android:id="@+id/foucus_reduce" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/video_more2" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="焦距 -" android:textColor="@color/black" android:textSize="16dp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> <ImageButton android:id="@+id/guangquan_reduce" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/video_more4" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="光圈 -" android:textColor="@color/black" android:textSize="16dp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> <ImageButton android:id="@+id/zoom_reduce" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/video_more6" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="变倍 -" android:textColor="@color/black" android:textSize="16dp" /> </LinearLayout> </LinearLayout> </RelativeLayout> <RelativeLayout android:layout_above="@id/rl_control" android:layout_below="@id/ra_title" android:layout_width="match_parent" android:layout_height="match_parent" > <SurfaceView android:id="@+id/realplay_sv" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/transparent" /> <ImageButton android:id="@+id/ib_rotate2" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignParentLeft="true" android:layout_marginLeft="3dp" android:background="@color/green" android:contentDescription="@null" android:onClick="changeScreen" android:visibility="gone" android:src="@mipmap/img_systems_close" /> <ProgressBar android:id="@+id/liveProgressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:visibility="visible" /> <LinearLayout android:id="@+id/ll_hc" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:visibility="gone"> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center" android:layout_weight="1" > <ImageButton android:id="@+id/ptz_top_btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/h_up" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center" android:layout_weight="1" > <ImageButton android:id="@+id/ptz_bottom_btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/h_down" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center" android:layout_weight="1" > <ImageButton android:id="@+id/ptz_left_btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/h_left" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center" android:layout_weight="1" > <ImageButton android:id="@+id/ptz_right_btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/h_right" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center" android:layout_weight="1" > <ImageButton android:id="@+id/focus_add2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/video_more1" /> </LinearLayout> <LinearLayout android:gravity="center" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" > <ImageButton android:id="@+id/foucus_reduce2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/video_more2" /> </LinearLayout> <LinearLayout android:gravity="center" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" > <ImageButton android:id="@+id/zoom_add2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/video_more5" /> </LinearLayout> <LinearLayout android:gravity="center" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" > <ImageButton android:id="@+id/zoom_reduce2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/video_more6" /> </LinearLayout> </LinearLayout> </RelativeLayout> </RelativeLayout>
06-25
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值