Отображать на поверхности VirtualDisplay из другого приложенияAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Отображать на поверхности VirtualDisplay из другого приложения

Сообщение Anonymous »

У меня есть головный блок для автомобиля с Android 5.1.1. В запуска есть слайдер, на одной из страниц слайдера запуск виртуального дисплея и поверхностей организован: < /p>
public class MapFragment extends BaseFragment implements IMapRenderReceiver {

private FragmentActivity mActivity;
private DisplayManager mDisplayManager;
private MapRenderReceiver mRenderMapReceiver = new MapRenderReceiver(this);
private int mSfHeight;
private int mSfWidth;
private SurfaceView mSurfaceView;
private ImageView mSurfaceViewDefaultBg;
private VirtualDisplay mVirtualDisplay;

@Override
@Nullable
public View onCreateView(@NonNull LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_map, container, false);
this.mActivity = getActivity();
initView(view);
init();
initMap();
return view;
}

private void initView(View view) {
this.mSurfaceView = (SurfaceView) view.findViewById(R.id.surfaceView);
this.mSurfaceViewDefaultBg = (ImageView) view.findViewById(R.id.SurfaceView_default_bg);
}

private void init() {
registerRenderMapReceiver();

this.mSurfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) { }

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { }

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
MapFragment.this.showDefaultMap();
}
});

this.mSurfaceView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AppsManager.getInstance().startApp(
MapFragment.this.mActivity.getApplicationContext(),
AppsConstant.MAP,
AppsConstant.MAP_PCK,
AppsConstant.MAP_MAIN
);
}
});
}

private void initMap() {
showDefaultMap();
this.mDisplayManager = (DisplayManager) this.mActivity.getSystemService("display");

this.mSurfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
LogUtils.d(MapFragment.this.TAG, "surfaceDestroyed: ");
if (MapFragment.this.mVirtualDisplay != null) {
MapFragment.this.mVirtualDisplay.release();
MapFragment.this.mVirtualDisplay = null;
}
MapFragment.this.showDefaultMap();
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
LogUtils.d(MapFragment.this.TAG, "surfaceCreated:");
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
MapFragment.this.mSfWidth = width;
MapFragment.this.mSfHeight = height;
MapFragment.this.createVirtualDisplay(holder.getSurface());
}
});
}

@Override
public void showDefaultMap() {
LogUtils.d(this.TAG, "showDefaultMap:");
this.mSurfaceViewDefaultBg.setVisibility(0);

SkinChange.getInstance().skinChange(new ISkinChange() {
@Override
public void skinChange(String skin) {
switch (skin) {
case "black_theme":
MapFragment.this.mSurfaceViewDefaultBg.setImageResource(R.mipmap.surface_bg);
break;
case "glod_theme":
MapFragment.this.mSurfaceViewDefaultBg.setImageResource(R.mipmap.surface_glod_bg);
break;
case "red_theme":
MapFragment.this.mSurfaceViewDefaultBg.setImageResource(R.mipmap.surface_red_bg);
break;
}
}
});
}

private void registerRenderMapReceiver() {
IntentFilter intentFilter = new IntentFilter(Constant.ACTION_LAUNCHER_MAP_START_RENDER);
intentFilter.addAction(BroadcastConstant.ACTION_LAUNCHER_MAP_SHOW);
intentFilter.addAction(BroadcastConstant.ACTION_LAUNCHER_MAP_HIDE);
this.mActivity.getApplicationContext().registerReceiver(this.mRenderMapReceiver, intentFilter);
}

public void createVirtualDisplay(Surface surface) {
if (this.mVirtualDisplay == null) {
this.mVirtualDisplay = this.mDisplayManager.createVirtualDisplay(
"PresentationScreenLauncher",
this.mSfWidth,
this.mSfHeight,
320,
surface,
11
);
}
}

@Override
public void hideDefaultMap() {
LogUtils.d(this.TAG, "hideDefaultMap: ");
this.mSurfaceViewDefaultBg.setVisibility(8);
}

@Override
public void onDestroy() {
super.onDestroy();
this.mActivity.getApplicationContext().unregisterReceiver(this.mRenderMapReceiver);
this.mRenderMapReceiver.onDestroy();
}
}
< /code>

< /code>
Мне нужно отобразить изображение из другого приложения на этой поверхности. Как лучше всего это сделать, использовать презентацию или можно напрямую выводить?


Подробнее здесь: https://stackoverflow.com/questions/797 ... pplication
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»