mirror of
https://github.com/zoriya/react-native-svg.git
synced 2026-06-05 16:04:38 +00:00
[android] Fix onPress to work when moving within bounds.
Adds support for inspector to check fill bounds.
This commit is contained in:
@@ -212,6 +212,7 @@ public class SvgView extends ReactViewGroup implements ReactCompoundView, ReactC
|
|||||||
float parentHeight = parent == null ? 0 : parent.getHeight();
|
float parentHeight = parent == null ? 0 : parent.getHeight();
|
||||||
width = (float) PropHelper.fromRelative(mbbWidth, parentWidth, 0, mScale, 12);
|
width = (float) PropHelper.fromRelative(mbbWidth, parentWidth, 0, mScale, 12);
|
||||||
height = (float) PropHelper.fromRelative(mbbHeight, parentHeight, 0, mScale, 12);
|
height = (float) PropHelper.fromRelative(mbbHeight, parentHeight, 0, mScale, 12);
|
||||||
|
setMeasuredDimension((int)Math.ceil(width), (int)Math.ceil(height));
|
||||||
}
|
}
|
||||||
Bitmap bitmap = Bitmap.createBitmap(
|
Bitmap bitmap = Bitmap.createBitmap(
|
||||||
(int) width,
|
(int) width,
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import com.facebook.react.uimanager.OnLayoutEvent;
|
|||||||
import com.facebook.react.uimanager.UIManagerModule;
|
import com.facebook.react.uimanager.UIManagerModule;
|
||||||
import com.facebook.react.uimanager.annotations.ReactProp;
|
import com.facebook.react.uimanager.annotations.ReactProp;
|
||||||
import com.facebook.react.uimanager.events.EventDispatcher;
|
import com.facebook.react.uimanager.events.EventDispatcher;
|
||||||
|
import com.facebook.react.views.view.ReactViewGroup;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
@@ -30,7 +31,7 @@ import javax.annotation.Nullable;
|
|||||||
import static com.horcrux.svg.FontData.DEFAULT_FONT_SIZE;
|
import static com.horcrux.svg.FontData.DEFAULT_FONT_SIZE;
|
||||||
|
|
||||||
@SuppressLint("ViewConstructor")
|
@SuppressLint("ViewConstructor")
|
||||||
abstract public class VirtualView extends ViewGroup {
|
abstract public class VirtualView extends ReactViewGroup {
|
||||||
final ReactContext mContext;
|
final ReactContext mContext;
|
||||||
|
|
||||||
VirtualView(ReactContext reactContext) {
|
VirtualView(ReactContext reactContext) {
|
||||||
@@ -39,11 +40,6 @@ abstract public class VirtualView extends ViewGroup {
|
|||||||
mScale = DisplayMetricsHolder.getScreenDisplayMetrics().density;
|
mScale = DisplayMetricsHolder.getScreenDisplayMetrics().density;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
N[1/Sqrt[2], 36]
|
N[1/Sqrt[2], 36]
|
||||||
The inverse of the square root of 2.
|
The inverse of the square root of 2.
|
||||||
@@ -443,6 +439,53 @@ abstract public class VirtualView extends ViewGroup {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
|
int width = mClientRect != null ?
|
||||||
|
(int) Math.ceil(mClientRect.width())
|
||||||
|
: getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);
|
||||||
|
|
||||||
|
int height = mClientRect != null ?
|
||||||
|
(int) Math.ceil(mClientRect.height())
|
||||||
|
: getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);
|
||||||
|
|
||||||
|
setMeasuredDimension(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called from layout when this view should
|
||||||
|
* assign a size and position to each of its children.
|
||||||
|
*
|
||||||
|
* Derived classes with children should override
|
||||||
|
* this method and call layout on each of
|
||||||
|
* their children.
|
||||||
|
* @param changed This is a new size or position for this view
|
||||||
|
* @param pleft Left position, relative to parent
|
||||||
|
* @param ptop Top position, relative to parent
|
||||||
|
* @param pright Right position, relative to parent
|
||||||
|
* @param pbottom Bottom position, relative to parent
|
||||||
|
*/
|
||||||
|
|
||||||
|
RectF layoutRect = new RectF();
|
||||||
|
protected void onLayout(boolean changed, int pleft, int ptop, int pright, int pbottom) {
|
||||||
|
if (mClientRect == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(this instanceof GroupView)) {
|
||||||
|
int left = (int) Math.floor(mClientRect.left);
|
||||||
|
int top = (int) Math.floor(mClientRect.top);
|
||||||
|
int right = (int) Math.ceil(mClientRect.right);
|
||||||
|
int bottom = (int) Math.ceil(mClientRect.bottom);
|
||||||
|
setLeft(left);
|
||||||
|
setTop(top);
|
||||||
|
setRight(right);
|
||||||
|
setBottom(bottom);
|
||||||
|
}
|
||||||
|
int width = (int) Math.ceil(mClientRect.width());
|
||||||
|
int height = (int) Math.ceil(mClientRect.height());
|
||||||
|
setMeasuredDimension(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
void setClientRect(RectF rect) {
|
void setClientRect(RectF rect) {
|
||||||
if (mClientRect != null && mClientRect.equals(rect)) {
|
if (mClientRect != null && mClientRect.equals(rect)) {
|
||||||
return;
|
return;
|
||||||
@@ -451,15 +494,30 @@ abstract public class VirtualView extends ViewGroup {
|
|||||||
if (mClientRect == null) {
|
if (mClientRect == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
int left = (int) Math.floor(mClientRect.left);
|
||||||
|
int top = (int) Math.floor(mClientRect.top);
|
||||||
|
int right = (int) Math.ceil(mClientRect.right);
|
||||||
|
int bottom = (int) Math.ceil(mClientRect.bottom);
|
||||||
|
int width = (int) Math.ceil(mClientRect.width());
|
||||||
|
int height = (int) Math.ceil(mClientRect.height());
|
||||||
|
|
||||||
|
if (!(this instanceof GroupView)) {
|
||||||
|
setLeft(left);
|
||||||
|
setTop(top);
|
||||||
|
setRight(right);
|
||||||
|
setBottom(bottom);
|
||||||
|
}
|
||||||
|
setMeasuredDimension(width, height);
|
||||||
|
|
||||||
EventDispatcher eventDispatcher = mContext
|
EventDispatcher eventDispatcher = mContext
|
||||||
.getNativeModule(UIManagerModule.class)
|
.getNativeModule(UIManagerModule.class)
|
||||||
.getEventDispatcher();
|
.getEventDispatcher();
|
||||||
eventDispatcher.dispatchEvent(OnLayoutEvent.obtain(
|
eventDispatcher.dispatchEvent(OnLayoutEvent.obtain(
|
||||||
this.getId(),
|
this.getId(),
|
||||||
(int) mClientRect.left,
|
left,
|
||||||
(int) mClientRect.top,
|
top,
|
||||||
(int) mClientRect.width(),
|
width,
|
||||||
(int) mClientRect.height()
|
height
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user