Deaktivieren und aktivieren Sie die Ansicht Android
Mein Ziel ist es, freie Formen über Google Map V2 zu zeichnen. Daher habe ich eine App zum Zeichnen freier Formen durch Fingerbewegung in einer benutzerdefinierten Ansicht erstellt und diese Ansicht über dem Kartenfragment in der Datei layout.xml platziert und den Ansichtshintergrund transparent gemacht. und jetzt kann ich freie Formen gut zeichnen, aber das Problem ist jetzt, dass ich die Karte nicht steuern oder zoomen oder hineinziehen kann.
Gibt es eine Möglichkeit, mich beide steuern zu lassen, zum Beispiel eine Schaltfläche, um das Steuerelement vom Kartenfragment zur Ansicht der Zeichnung und umgekehrt zu verbergen? oder die Ansicht des Zeichnens ein- / ausschalten?
Das ist mein Code
DrawerView.java
public class DrawerView extends View {
public Paint paint = new Paint();
public Path path = new Path();
public Path circlePath = new Path();
private int lineCol;
public LayoutParams params;
public DrawerView(Context context, AttributeSet attrs){
super(context, attrs);
//get the attributes specified in attrs.xml using the name we included
TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
R.styleable.LineView, 0, 0);
try {
//get the text and colors specified using the names in attrs.xml
lineCol = a.getInteger(R.styleable.LineView_lineColor, 0);//0 is default
} finally {
a.recycle();
}
//paint object for drawing in onDraw
paint.setAntiAlias(true);
paint.setColor(lineCol);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeWidth(4f);
}
public void onButtonPress(){
// resets the screen
path.reset();
// Calls the onDraw() method
postInvalidate();
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawPath(path, paint);
//canvas.drawPath(circlePath, circlePaint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Gives you x and y coordinates on the Event.
float pointX = event.getX();
float pointY = event.getY();
// Checks for the event that occurs
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
path.moveTo(pointX, pointY);
return true;
case MotionEvent.ACTION_MOVE:
path.lineTo(pointX, pointY);
circlePath.reset();
circlePath.addCircle(pointX, pointY, 30, Path.Direction.CW);
break;
case MotionEvent.ACTION_UP:
circlePath.reset();
break;
default:
return false;
}
postInvalidate();
return true;
}
}
MainActivity.java
public class MainActivity extends Activity
implements OnMapClickListener, OnMapLongClickListener, OnMarkerDragListener{
final int RQS_GooglePlayServices = 1;
private GoogleMap myMap;
Location myLocation;
boolean markerClicked;
PolygonOptions polygonOptions;
Polygon polygon;
Button plane;
Button tank;
Button ship;
DrawerView myView;
public Button btnReset;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
plane = (Button)findViewById(R.id.btn_plane);
tank = (Button)findViewById(R.id.btn_tank);
ship = (Button)findViewById(R.id.btn_ship);
FragmentManager myFragmentManager = getFragmentManager();
MapFragment myMapFragment = (MapFragment)myFragmentManager.findFragmentById(R.id.map);
myMap = myMapFragment.getMap();
myMap.setMyLocationEnabled(true);
myMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
myMap.setOnMapClickListener(this);
myMap.setOnMapLongClickListener(this);
myMap.setOnMarkerDragListener(this);
plane.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
myMap.addMarker(new MarkerOptions().position(
new LatLng(0.00, 0.00)).icon(BitmapDescriptorFactory.fromResource(R.drawable.plane)).draggable(true));
}
});
tank.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
myMap.addMarker(new MarkerOptions().position(
new LatLng(0.00, 0.00)).icon(BitmapDescriptorFactory.fromResource(R.drawable.tank)).draggable(true));
}
});
ship.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
myMap.addMarker(new MarkerOptions().position(
new LatLng(0.00, 0.00)).icon(BitmapDescriptorFactory.fromResource(R.drawable.destroyer)).draggable(true));
}
});
markerClicked = false;
myView = (DrawerView)findViewById(R.id.custView);
myView.setBackgroundColor(Color.TRANSPARENT);
btnReset = (Button) findViewById(R.id.clear);
btnReset.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
myView.path.reset();
myView.postInvalidate();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_settings:
String LicenseInfo = GooglePlayServicesUtil.getOpenSourceSoftwareLicenseInfo(
getApplicationContext());
AlertDialog.Builder LicenseDialog = new AlertDialog.Builder(MainActivity.this);
LicenseDialog.setTitle("Legal Notices");
LicenseDialog.setMessage(LicenseInfo);
LicenseDialog.show();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onResume() {
super.onResume();
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());
if (resultCode == ConnectionResult.SUCCESS){
Toast.makeText(getApplicationContext(),
"isGooglePlayServicesAvailable SUCCESS",
Toast.LENGTH_LONG).show();
}else{
GooglePlayServicesUtil.getErrorDialog(resultCode, this, RQS_GooglePlayServices);
}
}
@Override
public void onMapClick(LatLng point) {
myMap.animateCamera(CameraUpdateFactory.newLatLng(point));
markerClicked = false;
}
@Override
public void onMapLongClick(LatLng point) {
markerClicked = false;
}
@Override
public void onMarkerDrag(Marker marker) {
}
@Override
public void onMarkerDragEnd(Marker marker) {
}
@Override
public void onMarkerDragStart(Marker marker) {
}
}
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:custom="http://schemas.android.com/apk/res/com.example.dmeogooglemapv2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
tools:context=".MainActivity" >
<Button
android:id="@+id/btn_tank"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_alignParentTop="true"
android:background="@drawable/tank" />
<Button
android:id="@+id/btn_plane"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_alignParentTop="true"
android:background="@drawable/plane" />
<Button
android:id="@+id/btn_ship"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_alignParentTop="true"
android:background="@drawable/destroyer" />
<Button
android:id="@+id/clear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Clear" />
</LinearLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:custom="http://schemas.android.com/apk/res/com.example.dmeogooglemapv2"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.MapFragment"/>
<com.example.dmeogooglemapv2.DrawerView
android:id="@+id/custView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="5dp"
custom:lineColor="#ff0099" />
</RelativeLayout>
</LinearLayout>