Articles of 自定义视图

你应该如何使用带有PathShape的ShapeDrawable在自定义视图上绘制一条线?

我试图在自定义View绘制一条线。 在这里,我创建了一个只有一个段的简单Path , PathShape创建了一个PathShape ,最后将其粘贴到一个ShapeDrawable ,目的是使用它在onDraw()内部的Canvas上绘制。 但是,这不起作用。 看看我的例子,这里。 package com.example.test; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.PathShape; import android.util.Log; import android.view.View; public class TestView extends View { private Path mPath = null; private Paint mPaint = null; private PathShape mPathShape = null; private ShapeDrawable mShapeDrawable = null; public […]

自定义SurfaceView导致NoSuchMethodException

我有一个自定义View扩展SurfaceView。 XML布局是 <com.myPackage.MyCustomView android:id =“@ + id / mycview”android:layout_width =“fill_parent”android:layout_height =“fill_parent”/> 这堂课是: public class MyCustomView extends SurfaceView{ public float[] xpositions; public float[] ypositions; public String[] units; public MyCustomView(Context context, float[] xpos, float[] ypos,String[] u) { super(context); xpositions=xpos; ypositions =ypos; units=u; } … } 在此方法的上下文活动中,我有以下行 MyCustomView mv = (MyCustomView)findViewById(R.id.mycview); LogCat输出具有以下内容 01-30 01:51:12.124: ERROR/AndroidRuntime(4934): Caused by: java.lang.NoSuchMethodException:MyCustomView(Context,AttributeSet) […]

Android:调整自定义视图的大小。 父级已resize,但宽度/高度更改不会传递给子视图

我目前正在尝试使用android制作基于旧学校战舰棋盘游戏的游戏。 我现在只是在试图感受它以及我可能需要制作游戏的组件。 基本上我目前在布局xml文件中的内容如下: 我希望BoardView只占用屏幕的某个部分,即视图应该是我想在此视图中创建的内容的大小。 在这种情况下,它是2D板。 这是通过从扩展View覆盖onMeasure()方法来完成的。 视图的宽度保持不变,但高度与宽度相同,给出了完美的正方形。 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ int parent_width = MeasureSpec.getSize(widthMeasureSpec); this.setMeasuredDimension(parent_width, parent_width); Log.d(“BOARD_VIEW”, “BoardView.onMeasure : width = ” + this.getMeasuredWidth() + “, height = ” + this.getMeasuredHeight()); } 我通过覆盖onSizeChanged()函数的视图并检查那里的值来检查视图维度是否已更改。 @Override protected void onSizeChanged(int w, int h, int oldw, int oldh){ Log.d(“BOARD_VIEW”, “BoardView.onSizeChanged : width = ” + […]

在onMeasue中处理自定义视图的权重

我有一个自定义视图,我正在创建它将缩放其子TextViews的字体大小以适应所有设置的宽度,所以每个都在自己的行。 显然,它需要宽度来计算出来。 我已经覆盖了onMeasure()如下所示: @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int widthSize = MeasureSpec.getSize(widthMeasureSpec); int lineWidth = widthSize – getPaddingLeft() – getPaddingRight(); // Change the text size until the largest line of text fits. while (lineWidth < calculateTextWidth()) { for (TextView textView : this.childViews) { float newSize = textView.getTextSize() – 1; textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, newSize); } […]

如何将Touch Listeners传递给自定义视图进行拖放操作?

我有一个关于处理CustomView touch events的问题。我正在动态地将自定义视图添加到布局(即FrameLayout)。 那些具有touchListeners的自定义视图用于在角落处拉点(如下图所示)。 除此之外我必须在屏幕上拖放整个视图,如果用户触摸除了那些角点之外(图像中的颜色区域)必须拖放视图,否则不会,以及如果用户触摸到外面的那个查看我不想触发任何触摸侦听器。 我可以使用此代码来提取这些点 @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: if (topTouchArea.contains(event.getX(), event.getY())) { currentTouch = TOUCH_TOP; } else if (RightTouchArea.contains(event.getX(),event.getY())) { currentTouch = TOUCH_RIGHT; } else if (LeftTouchArea.contains(event.getX(),event.getY())) { currentTouch = TOUCH_LEFT; } else { return false; //Return false if user touches none of the corners } […]

Android:基于布局的自定义视图:如何?

我正在构建一个Android应用程序,我对自定义视图有点挣扎。 我希望有一个可重用的视图,它包含一些标准的布局元素。 让我们说一个带有一些按钮的relativelayout。 我该怎么办? 我应该创建一个扩展RelativeLayout的自定义视图类并以编程方式添加这些按钮吗? 我觉得这有点矫枉过正? 在Android中正确执行此操作的方法是什么?

如何设置自定义surfaceview的大小

请告诉我,如果我这样做的方式完全错误,但如果我解释这个问题,我希望有人可以帮助我,或者指出我正确的方向。 我需要一个可以移动的自定义视图,我希望在我的一个主要活动中将此视图放在我的relativeLayout的一部分上。 我按照移动教程(下面的链接)创建了一个updateThread和一个扩展SurfaceView的类。 http://mobile.tutsplus.com/tutorials/android/android-sdk-achieving-movement/ 这有效,我可以把它放在我的应用程序中。 当我想在我的布局中将其放在不同的活动上时会出现问题。 我设法将视图放入,但它显示全屏,在其他项目后面。 我的部分问题在于它的大小取决于屏幕的大小等。相对布局使用大量图像,其中Android将选择所需的正确大小的图像。 对于SurfaceView,如何设置依赖于手机的大小? 现在,我有相对布局正确显示自定义视图需要去的图像。 图像显示正确的大小,只是我需要显示的静态版本。 你知道如何将我的自定义视图移动到这个空间吗? 如果你需要任何代码,我可以发布任何代码,我真的很难用这个。 即使你可以指出我正确的方向,或者让我知道我是否应该使用表面视图? 视图只需要显示一些图像在屏幕上滑动,这就是所有(在主要布局的那一部分内) 非常感谢提前

布局xml中具有自定义视图的空指针exception

这是自定义视图代码,它在使用此视图的XML的布局选项卡中提供了一个空指针exception: 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 = […]

如何在自定义视图中添加视图?

我有一个类似的课程,其中大约有10个 public class DataItemPlainView extends View{ public DataItemPlainView(Context context) { super(context); // TODO Auto-generated constructor stub }} 现在我需要将TextView,ImageView等放在这个视图中。 当我从某个地方调用它时,我想得到我的customView。 将视图设置为自定义布局也是一种情况。 谢谢

如何在执行onLongClick上查看ViewGroup(FrameLayout)中的特定(自定义)视图的索引

有人可以用我的语法帮助我吗? 我正在动态地将一些视图(自定义视图)添加到已经在XML中定义的FrameLayout。 那些自定义视图是不同types或相同types。 我可以在屏幕上添加视图,但无法从ViewGroup中删除特定视图(types相同或不同)。 那些具有onTouch()自定义视图。 在这里,我面临着问题:无法触发long click ,总是需要touch listener 如果用户在长按时选择一个视图,我必须在这里创建两个选项 改变背景颜色 删除视图。 编辑:根据道建议我可以得到长按视图的索引,如果没有触摸监听器的查看。 但我必须实施触控听众以及长按…… 我怎样才能做到这一点?