我知道如何使用自定义视图(EditText或TextView)来描边文字但我无法实现像这样的美丽的东西,这是使用Photoshop完成的.是的,它也有外影.
到目前为止我所做的是调整笔画宽度和笔画连接样式.但是,如果我增加笔划宽度,则笔划会发生整个文本.据我所搜索,有一个名为MagicTextView的库,但它也无法提供上述结果.
更新:我根据@pskink的建议调整了一些内容.它现在有效.但是我不能再拖了.如果我拖动EditText,会出现一些像这样的奇怪线条.

这是代码:
@Override public void onDraw(Canvas canvas) {
final int x = this.getLeft();
final int y = this.getBottom();
mText = this.getText().toString();
p.setStrokeWidth(30);
p.setStyle(Style.STROKE);
p.setStrokeJoin(Join.ROUND);
p.setColor(0xffffffff);
canvas.drawText(mText, x, y, p);
p.setStyle(Style.FILL);
p.setColor(0xff000000);
canvas.drawText(mText, x, y, p);
}
Run Code Online (Sandbox Code Playgroud) 我无法为我的自定义视图创建单元测试。我尝试添加一个属性并测试它是否我的自定义视图类正确。
这是我的测试的样子:
@RunWith(AndroidJUnit4.class)
@SmallTest
public class BaseRatingBarMinRatingTest {
private Context mContext;
@Before
public void setUp(){
mContext = InstrumentationRegistry.getTargetContext();
}
@Test
public void constructor_should_setMinRating_when_attriSetHasOne() throws Exception{
// 1. ARRANGE DATA
float minRating = 2.5f;
AttributeSet as = mock(AttributeSet.class);
when(as.getAttributeFloatValue(eq(R.styleable.BaseRatingBar_srb_minRating), anyFloat())).thenReturn(minRating);
// 2. ACT
BaseRatingBar brb = new BaseRatingBar(mContext, as);
// 3. ASSERT
assertThat(brb.getMinRating(), is(minRating));
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
哪个得到这个异常:
java.lang.ClassCastException: android.util.AttributeSet$MockitoMock$1142631110 cannot be cast to android.content.res.XmlBlock$Parser
Run Code Online (Sandbox Code Playgroud)
我尝试像本文那样模拟 TypeArray ,但我的观点将模拟的上下文视为 null。
有没有什么好方法可以为自定义视图创建测试用例?
我有一个简单的自定义视图,通过插座连接到NIB.对于这个特定的视图,我想在视图初始化时对视图执行操作,无论它在哪个NIB上.
麻烦的是,在自定义视图上调用(id)init或(id)initWithFrame:(CGRect)框架方法.
当它从NIB实例化时,在UIView上调用哪个方法?我只会使用视图控制器和viewDidLoad方法,除了这个特定的视图出现在很多不同的NIB上.
我有一个自定义视图,我只想访问xml布局值layout_height.
我目前正在获取该信息并在onMeasure期间存储它,但这仅在视图首次绘制时发生.我的视图是XY图,它需要尽早知道它的高度,以便它可以开始执行计算.
The view is on the fourth page of a viewFlipper layout, so the user may not flip to it for a while, but when they do flip to it, I would like the view to already contain data, which requires that I have the height to make the calculations.
Thanks!!!
我已经阅读了很多关于此事的内容,并且看不到之前已经完成或尝试过的人.
所以我有一个扩展ImageView的对象,然后在此我调用一个进度对话框并将进度对话框的内容设置为imageview(即尝试在imageview..view中绘制进度对话框.)
loadingProgressDialog.setContentView(this); //this is: LoaderImageView extends ImageView
loadingProgressDialog.setIndeterminate(true);
loadingProgressDialog.show();
Run Code Online (Sandbox Code Playgroud)
我收到错误:必须在添加内容之前调用requestFeature()
现在我在大量帖子之前看到过这个错误,是的,答案似乎很明显.我试图设置所有功能:
loadingProgressDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
loadingProgressDialog.requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
loadingProgressDialog.getWindow().requestFeature(Window.FEATURE_PROGRESS);
loadingProgressDialog.getWindow().requestFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
Run Code Online (Sandbox Code Playgroud)
但首先我不明白为什么需要这个?第二,他们都没有工作!
所以问题是我可以将ProgressDialog contentView设置为ImageView吗?如果是这样我有什么问题?
可能重复:
Android SeekBar拇指被剪裁/切断
我按照本教程做了一个自定义搜索栏:http://www.mokasocial.com/2011/02/create-a-custom-styled-ui-slider-seekbar-in-android/
但当我把搜索拇指放在栏的开头或末尾时,其边缘会被切割,如下所示:http: //s2.postimage.org/d9dqrrms/myseekbar.png
我完成了教程所说的内容(只是更改了渐变颜色).怎么了?
有人可以用我的语法帮助我吗?我正在动态地将一些视图(自定义视图)添加到已经在XML中定义的FrameLayout.那些自定义视图是不同类型或相同类型.我可以在屏幕上添加视图,但无法从ViewGroup中删除特定视图(类型相同或不同).那些自定义视图onTouch().
在这里,我面临着问题:无法触发long click,总是需要touch listener
如果用户在长按时选择一个视图,我必须在这里创建两个选项
编辑:根据tao建议我可以得到长按视图的索引,如果没有触摸监听器的查看.但我必须实施触控听众以及长按......
我怎样才能做到这一点?
这是自定义视图代码,它在使用此视图的XML的布局选项卡中为我提供了空指针异常:
public class BoardView extends View {
// Drawables for the board boxes, the playable zone
public Drawable[][] block = new Drawable[20][10];
// Drawables for the wall (yes, it's done with tiles)
public Drawable[] wall = new Drawable[102];
// Drawable for the background, and boolean for drawing it or not
Drawable mbg;
boolean bg = false;
// Context and canvas to be used along the class
Context context;
Canvas c;
/*************************************************/
/* Class constructor **************************** */
/*************************************************/
/* Defines the …Run Code Online (Sandbox Code Playgroud) 无法android:gravity从我的CustomView 获取gravity属性().
XML
<MyCustomView
...
android:gravity="right"
/>
Run Code Online (Sandbox Code Playgroud)
我的自定义视图;
class MyCustomView extends LinearLayout{
...
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
getGravity(); //Throws method not found exception
((LayoutParams)getLayoutParams()).gravity; //This returns the value of android:layout_gravity
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
...
}
Run Code Online (Sandbox Code Playgroud)
getGravity(); 抛出方法未找到异常;
((LayoutParams)getLayoutParams()).gravity; 返回android:layout_gravity的值
无论如何我可以从视图中获取引力属性吗?
在 Flutter 中,创建CustomPainter时,有一个重写方法,shouldRepaint(),您可以返回 true 或 false...大概是为了告诉系统是否重新绘制视图。
\n在文档中,该方法的描述是:
\n\n\nshouldRepaint(covariant CustomPainter oldDelegate) \xe2\x86\x92 bool 每当向 RenderCustomPaint 对象提供\n自定义绘制委托类的新实例时\n或在使用该对象的新实例创建新的\nCustomPaint 对象时调用\n自定义\npainter委托类(这相当于同一件事,因为后者是根据前者实现的)。[...]
\n
除了它返回一个布尔值之外,我基本上不明白任何其他内容。这让我很头疼!我还怀疑深入研究“自定义画家委托类”或“RenderCustomPaint 对象”的定义不会是一种启发性的体验。
\n我很困惑,因为:
\n我认为我们不必担心小部件何时“应该重新绘制”,因为 Flutter 应该根据其自身复杂的优化决策来决定何时何地重新渲染小部件树。
\n我认为 Paint() 方法是您定义“这就是该视图如何绘制自身的方式,(无论何时何地有必要)”的地方
\n我发现的所有示例都只是从该方法返回 false...但我注意到使用 true 与 false 时的不同行为。
\n如果我们总是返回 false,那么它如何重新绘制呢?(即使是假的,它也会重新绘制)
\n如果我们唯一可用的逻辑是将“oldDelegate”与(某物?)进行比较,那么为什么我们需要重写该方法呢?
\n我还没有看到任何示例来演示为什么或如何返回 TRUE,以及为了做出该决定而这样的示例的逻辑是什么样的。
\n一个有知识的人为什么以及如何决定返回 false?
\n一个有知识的人为什么以及如何决定回归真实?
\n谁能像你在和一个 13 岁的孩子(不是 Linus Torvalds)说话一样解释它?
\n一个简单的代码示例和反例会很棒(而不是详尽的明确解释!)
\ncustom-view flutter flutter-custompainter flutter-custompaint