/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */

package android.util;

import android.graphics.Path;

import dalvik.annotation.optimization.FastNative;

@hide
/** * @hide */
public class PathParser { static final String LOGTAG = PathParser.class.getSimpleName();
Params:
  • pathString – The string representing a path, the same as "d" string in svg file.
Returns:the generated Path object.
/** * @param pathString The string representing a path, the same as "d" string in svg file. * @return the generated Path object. */
public static Path createPathFromPathData(String pathString) { if (pathString == null) { throw new IllegalArgumentException("Path string can not be null."); } Path path = new Path(); nParseStringForPath(path.mNativePath, pathString, pathString.length()); return path; }
Interpret PathData as path commands and insert the commands to the given path.
Params:
  • data – The source PathData to be converted.
  • outPath – The Path object where path commands will be inserted.
/** * Interpret PathData as path commands and insert the commands to the given path. * * @param data The source PathData to be converted. * @param outPath The Path object where path commands will be inserted. */
public static void createPathFromPathData(Path outPath, PathData data) { nCreatePathFromPathData(outPath.mNativePath, data.mNativePathData); }
Params:
  • pathDataFrom – The source path represented in PathData
  • pathDataTo – The target path represented in PathData
Returns:whether the nodesFrom can morph into nodesTo
/** * @param pathDataFrom The source path represented in PathData * @param pathDataTo The target path represented in PathData * @return whether the <code>nodesFrom</code> can morph into <code>nodesTo</code> */
public static boolean canMorph(PathData pathDataFrom, PathData pathDataTo) { return nCanMorph(pathDataFrom.mNativePathData, pathDataTo.mNativePathData); }
PathData class is a wrapper around the native PathData object, which contains the result of parsing a path string. Specifically, there are verbs and points associated with each verb stored in PathData. This data can then be used to generate commands to manipulate a Path.
/** * PathData class is a wrapper around the native PathData object, which contains * the result of parsing a path string. Specifically, there are verbs and points * associated with each verb stored in PathData. This data can then be used to * generate commands to manipulate a Path. */
public static class PathData { long mNativePathData = 0; public PathData() { mNativePathData = nCreateEmptyPathData(); } public PathData(PathData data) { mNativePathData = nCreatePathData(data.mNativePathData); } public PathData(String pathString) { mNativePathData = nCreatePathDataFromString(pathString, pathString.length()); if (mNativePathData == 0) { throw new IllegalArgumentException("Invalid pathData: " + pathString); } } public long getNativePtr() { return mNativePathData; }
Update the path data to match the source. Before calling this, make sure canMorph(target, source) is true.
Params:
  • source – The source path represented in PathData
/** * Update the path data to match the source. * Before calling this, make sure canMorph(target, source) is true. * * @param source The source path represented in PathData */
public void setPathData(PathData source) { nSetPathData(mNativePathData, source.mNativePathData); } @Override protected void finalize() throws Throwable { if (mNativePathData != 0) { nFinalize(mNativePathData); mNativePathData = 0; } super.finalize(); } }
Interpolate between the fromData and toData according to the fraction, and put the resulting path data into outData.
Params:
  • outData – The resulting PathData of the interpolation
  • fromData – The start value as a PathData.
  • toData – The end value as a PathData
  • fraction – The fraction to interpolate.
/** * Interpolate between the <code>fromData</code> and <code>toData</code> according to the * <code>fraction</code>, and put the resulting path data into <code>outData</code>. * * @param outData The resulting PathData of the interpolation * @param fromData The start value as a PathData. * @param toData The end value as a PathData * @param fraction The fraction to interpolate. */
public static boolean interpolatePathData(PathData outData, PathData fromData, PathData toData, float fraction) { return nInterpolatePathData(outData.mNativePathData, fromData.mNativePathData, toData.mNativePathData, fraction); } // Native functions are defined below. private static native void nParseStringForPath(long pathPtr, String pathString, int stringLength); private static native long nCreatePathDataFromString(String pathString, int stringLength); // ----------------- @FastNative ----------------------- @FastNative private static native void nCreatePathFromPathData(long outPathPtr, long pathData); @FastNative private static native long nCreateEmptyPathData(); @FastNative private static native long nCreatePathData(long nativePtr); @FastNative private static native boolean nInterpolatePathData(long outDataPtr, long fromDataPtr, long toDataPtr, float fraction); @FastNative private static native void nFinalize(long nativePtr); @FastNative private static native boolean nCanMorph(long fromDataPtr, long toDataPtr); @FastNative private static native void nSetPathData(long outDataPtr, long fromDataPtr); }