我想在Core Graphics中做类似于Photoshops内部阴影效果的操作.如果我使用此效果绘制/填充路径,我想获得类似于以下内容的内容:alt text http://i45.tinypic.com/357kile.png
我在滚动视图上放了一些图像视图.当我拖动这个滚动视图时,我没有任何问题.
但是在我将阴影效果应用于这些图像视图后,拖动此滚动视图会导致性能下降.
我使用了shadowOpacity,shadowRadius和shadowOffset方法.
例如:
[ [ anImageView layer ] shadowOpacity: 1.0 ];
Run Code Online (Sandbox Code Playgroud)
如果使用阴影效果会严重影响性能,我会直接绘制图像的阴影.
如果有关于此问题的一些提示,请告诉我们.
我想以编程方式在iOS上使用阴影效果,因为我的绘图技巧最差.
谢谢你的阅读.
我是CALayer的新手.我看了一下文档,但是很难理解那些可以用来控制阴影的属性的含义
shadowOpacity
shadowRadius
shadowOffset
我特别不明白Offset&Radius.
对于这个新手问题,有人能给我一些灯吗?
关于阴影的另一个问题是
如果UIView view1的帧是CGRect(0,0,768,40),如果我在其上应用阴影,阴影是否可能被另一个UIView覆盖,该UIView就在view1的下边缘旁边?
谢谢
我在InterfaceBuilder中创建了一个UIButton.当用户按下按钮时,整个按钮呈灰色阴影.有没有办法改变这种行为,所以当按下按钮时按钮不再是灰色阴影?
目前我正在开发iOS的绘图应用程序.我坚持将阴影效果应用于特定的绘制路径.我使用UIBezierpath绘制路径.有没有办法在UIBezierpath上应用阴影效果?
材料设计非常强调"纸张"的隐喻.要做到这些,阴影是必不可少的.由于Material设计是一种哲学而不是API(尽管它被构建到L中),因此应该在任何地方(Windows窗体,HTML/CSS等)进行.我如何在Android API 14到20中执行此操作?
请注意,对于圆形和其他非方形形状,预制PNG实际上并不实用.
我正在尝试使用Robolectric进行测试.我的目标是能够从自定义行为中替换一个类的功能(例如来自库,我无法修改代码).
我创建了这个小测试来模拟我想要做的事情:
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowMessenger.class})
public class TestShadow {
@Test
public void testMessenger() {
OriginalMessenger messenger = new OriginalMessenger();
String message = messenger.getMessage();
Assert.assertEquals("Shadow messenger", message);
}
public static class OriginalMessenger {
public String getMessage() {
return "Original messenger";
}
}
@Implements(OriginalMessenger.class)
public static class ShadowMessenger extends OriginalMessenger {
@Implementation
public String getMessage() {
return "Shadow messenger";
}
}
}
Run Code Online (Sandbox Code Playgroud)
在示例中,OriginalMessenger是库中的类,并提供默认功能.而ShadowMessenger是包含我想申请每当我使用自定义行为类OriginalMessenger.
但是,当我运行测试时,它失败了.消息的内容是"原始信使".好像ShadowMessenger从未使用过.
我究竟做错了什么?
Lollipop具有"View"类的所有新功能.它们之间究竟有什么区别,为什么我们需要这么多功能呢?
我已经阅读了文档,我想了解(或更好地理解)每个文档的差异和需求,以便我知道何时使用它们:
基础z视图的深度
必须是维值,这是一个附加单位的浮点数,例如"14.5sp".可用单位是:px(像素),dp(与密度无关的像素),sp(基于首选字体大小的缩放像素),in(英寸),mm(毫米).
这也可能是对包含此类型值的资源(格式为"@ [package:] type:name")或主题属性(格式为"?[package:] [type:] name")的引用.
这对应于全局属性资源符号高程.
那么它是从它开始的呢?
在视图的z中翻译.此值将添加到其高程.
必须是维值,这是一个附加单位的浮点数,例如"14.5sp".可用单位是:px(像素),dp(与密度无关的像素),sp(基于首选字体大小的缩放像素),in(英寸),mm(毫米).
这也可能是对包含此类型值的资源(格式为"@ [package:] type:name")或主题属性(格式为"?[package:] [type:] name")的引用.
这对应于全局属性资源符号translationZ.
除了"提升"之外还添加了这个?为什么需要?
设置此视图的可视z位置(以像素为单位).这相当于将translationZ属性设置为传入的x值与当前提升属性之间的差值.
我根本不明白这个的解释.这会影响阴影吗?它是干什么用的?要处理2个视图具有相同的总elavation值的情况?动画此值是否会改变视图的显示方式?
我已经将UITableViewCell类子类化为在我的单元格下面添加阴影.当TableView出现在屏幕上时,阴影会正确添加.但是,当我向下滚动tableview,并且阴影的单元格隐藏在屏幕上方时,阴影消失.
- (void)layoutSubviews {
[super layoutSubviews];
if (self.shouldAddShadow) {
self.layer.shadowOpacity = 0.5;
self.layer.shadowRadius = 1.5;
self.layer.shadowOffset = CGSizeMake(0, 3);
self.layer.shadowColor = [[[UIColor appDarkDividerColor] colorWithAlphaComponent:0.9] CGColor];
[self setClipsToBounds:NO];
[self.layer setMasksToBounds:NO];
CGRect shadowFrame = self.layer.bounds;
CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:shadowFrame].CGPath;
self.layer.shadowPath = shadowPath;
}
}
Run Code Online (Sandbox Code Playgroud)
忘了提,我有静态细胞的tableview; 所以不会调用prepareForReuse.我有我的单元格的插座,所以我也尝试在scrollViewDidScroll:方法中将阴影设置到我的单元格.即便如此,这对我没有帮助
我有一个CardView对齐底部屏幕,尽管我希望在CardView顶部添加更多阴影.我试过了
android:shadowColor="#000"
android:shadowDx="0"
android:shadowDy="30"
android:shadowRadius="50"
Run Code Online (Sandbox Code Playgroud)
但是看到没有变化这是我的代码:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:clipToPadding="false"
android:clipChildren="false"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--rest of the code-->
<LinearLayout
android:layout_width="match_parent"
android:layout_alignParentBottom="true"
android:shadowColor="#000"
android:shadowDx="0"
android:shadowDy="30"
android:shadowRadius="50"
android:layout_height="wrap_content">
<android.support.v7.widget.CardView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="8dp"
android:divider="@android:color/transparent"
android:dividerHeight="0.0px"
android:clipToPadding="false"
android:clipChildren="false"
app:cardElevation="10dp"
app:cardPreventCornerOverlap="false">
<!--rest of the code-->
</android.support.v7.widget.CardView>
</LinearLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud) shadow ×10
android ×4
ios ×3
iphone ×2
calayer ×1
cardview ×1
core ×1
dropshadow ×1
graphics ×1
java ×1
objective-c ×1
performance ×1
photoshop ×1
robolectric ×1
uibezierpath ×1
uibutton ×1
uikit ×1
uitableview ×1