我正在尝试实施新的Android Google Maps API(v2).然而,它与SlidingMenu似乎并不顺利.如您所知,MapFragment实施基于SurfaceView.问题是SurfaceView它不喜欢移动它 - 我的意思是把它放在可移动的视图中:
ViewPager, ScrollView, ListView,SlidingMenu.移动它时,它会在其像素最初放置的位置留下黑洞.它看起来像这样.
通过在其上指定透明背景SurfaceView或者甚至在其上放置透明可以部分地解决该问题View.我只是无法想象,如果只是对我来说结果是不可接受的,或者我有一个不同的问题,使它看起来如何.
要查看它的外观,请观看此视频.
(对不起质量,但无论如何都可以轻松看到问题)
当打开时拉开正常的列表视图(橙色屏幕)时SlidingMenu,动画很流畅.但是一MapFragment出现,地图上就会出现一些奇怪的刷新/闪烁/同步问题.
在HTC One S和三星Galaxy ACE上测试过.
我解决它的超级疯狂的想法:每次开始动画开始时,截取
拍摄地图的截图是不可能的,但也许有人会从中受到启发.MapFragment(应该可以使用SurfaceView)并在动画期间将其放置.但我真的不知道该怎么做......
或者也许禁用以其他方式重绘地图,我不知道.
更新:
发现了这个.
看起来SurfaceView可以更改为TextureView以消除这些限制.但由于MapFragment基于SurfaceView,我不知道它是否可以实现.
另一个更新 似乎此问题已在4.1+设备上得到解决.他们只使用了TextureView.但在较低版本中,我们仍然需要使用变通方法.
android surfaceview android-maps mapfragment android-maps-v2
我正在创建一个应用程序,从Google地图中选择地点并将地址存储在数据库中.我还想将所选位置的快照存储在存储中,这样我就可以显示带有相应快照的数据.
当我从地图中选择一个地点时,地方选择器活动会显示以下对话框:
在对话框中,显示地址,纬度和经度以及快照.我知道如何获取地址和latLng.但不知道如何存储显示的快照.
这是我的方法,它检索除该图像以外的所有内容:
//opening place picker activity.
protected void onActivityResult(int requestCode,
int resultCode, Intent data) {
if (requestCode == PLACE_PICKER_REQUEST
&& resultCode == Activity.RESULT_OK) {
final Place place = PlacePicker.getPlace(this, data);
final CharSequence name = place.getName();
final CharSequence address = place.getAddress();
String attributions = (String) place.getAttributions();
if (attributions == null) {
attributions = "";
}
tv4.setText(place.getLatLng().toString()+"\n"+name+"\n"+address+"\n"+attributions);
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何获取图像并将其存储在外部或内部存储中.可能吗?我要按照此链接中的说明拍摄快照吗?
编辑
我有以下活动,即调用地方选择器的活动:
Main2Activity.java:
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent; …Run Code Online (Sandbox Code Playgroud) 我正在尝试截取Android OpenGL的截图.
我找到的代码如下:
nt size = width * height;
ByteBuffer buf = ByteBuffer.allocateDirect(size * 4);
buf.order(ByteOrder.nativeOrder());
glContext.glReadPixels(0, 0, width, height, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, buf);
int data[] = new int[size];
buf.asIntBuffer().get(data);
buf = null;
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
bitmap.setPixels(data, size-width, -width, 0, 0, width, height);
data = null;
short sdata[] = new short[size];
ShortBuffer sbuf = ShortBuffer.wrap(sdata);
bitmap.copyPixelsToBuffer(sbuf);
for (int i = 0; i < size; ++i) {
//BGR-565 to RGB-565
short v = sdata[i];
sdata[i] = (short) (((v&0x1f) << …Run Code Online (Sandbox Code Playgroud) 我必须用新的"快照制造商"来解决这个问题,这是在谷歌地图发布8月份实施但我不知道如何做到这一点.可以给我一个简单的例子吗?
这是我的代码:
public class MainActivity extends Activity {
static LatLng HAMBURG = new LatLng(47.524749, 21.632745);
GoogleMap map;
File dbFile;
private File imageFile;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PolylineOptions line = new PolylineOptions();
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
.getMap();
/*
* Adatbázis
*/
try {
dbFile = getDatabasePath("/mnt/sdcard/Download/TeleSensors.db");
} catch (Exception e) {
}
SQLiteDatabase myDataBase = SQLiteDatabase.openDatabase(
dbFile.getAbsolutePath(), null, SQLiteDatabase.OPEN_READONLY);
Cursor curTAB = myDataBase.rawQuery("SELECT * FROM GPS_Values;", null);
Integer count = 0;
while (curTAB.moveToNext()) {
String s_latitude …Run Code Online (Sandbox Code Playgroud) 我正在使用这个答案的代码来截取Google Map v2, 它给出了输出:

哪个可以拍摄Map的屏幕截图
使用以下代码,我可以使用黑色地图屏幕的布局屏幕截图,如下面的代码地图将在ScreenShot中黑色
String mPath = Environment.getExternalStorageDirectory().toString()
+ "/" + "myTestScr" + System.currentTimeMillis() + ".jpeg";
Bitmap bitmap;
View v1 = (View) findViewById(R.id.rootviewtest);
v1.setDrawingCacheEnabled(true);
bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
OutputStream fout = null;
File imageFile = new File(mPath);
try {
fout = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout);
fout.flush();
fout.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
以上代码的输出:

我真正需要的是:

所以,现在我的问题是如何在第3屏幕中获得输出programmatically?
帮我合并两个(1和2)屏幕拍摄一个屏幕截图programmatically?
或者programmatically在拍摄(1和2)屏幕截图后合并两个图像的任何其他替代方案?
我正在尝试使用此处提到的API获取Google Maps V2地图的屏幕截图,但这似乎总是返回底部带有Google徽标的白色图片.如果它不是徽标,我会确定这根本不起作用,但徽标意味着发生了一些事情并且地图没有显示.这大致就是我正在做的事情:
mv.setVisibility(View.VISIBLE);
mv.getMap().snapshot(new GoogleMap.SnapshotReadyCallback() {
public void onSnapshotReady(Bitmap snapshot) {
synchronized(finished) {
finished[0] = snapshot;
finished.notify();
}
}
});
Run Code Online (Sandbox Code Playgroud)
我尝试了多种不同的方法,包括将图像绘制到不同的图像和各种其他尝试.
唯一的主要区别是我使用MapView而不是MapFragment,因为我在这里无法切换到使用片段的一些技术问题.
我一直在研究如何在 android 中以编程方式截取屏幕截图,但是当它截取屏幕截图时,我得到了一个工具栏和黑屏,而不是屏幕上实际显示的内容。
我还尝试在我为谷歌地图创建的自定义 InfoWindow 布局中对特定的 TextView 进行屏幕截图。但这会在下面的第二行创建一个空指针异常。
TextView v1 = (TextView)findViewById(R.id.tv_code);
v1.setDrawingCacheEnabled(true);
Run Code Online (Sandbox Code Playgroud)
无论如何,是否可以在不安装android屏幕截图库的情况下实际截图屏幕上的内容,或者在自定义InfoWindow布局中截图TextView
这是我的截图方法:
/**
* Method to take a screenshot programmatically
*/
private void takeScreenshot(){
try {
//TextView I could screenshot instead of the whole screen:
//TextView v1 = (TextView)findViewById(R.id.tv_code);
View v1 = getWindow().getDecorView().getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
File f = new File(Environment.getExternalStorageDirectory()
+ File.separator + "test.jpg");
FileOutputStream fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());
fo.flush();
fo.close();
MediaStore.Images.Media.insertImage(getContentResolver(), f.getAbsolutePath(), f.getName(), …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,用户希望通过搜索或触摸类似whatsApp 的地图来发送他的位置,然后我想创建一个与 whatsapp 相同的触摸位置或搜索位置的缩略图。
我在互联网上搜索我只找到了这个,但是很难用 eclipse 和 android 低版本来实现。那么有没有其他方法可以做到
提前致谢
android ×8
google-maps ×3
java ×2
screenshot ×2
android-maps ×1
codenameone ×1
mapfragment ×1
opengl-es ×1
snapshot ×1
surfaceview ×1