我创建了一个自定义视图,它将显示一个圆圈(想法是用户将能够以各种方式与此"球"进行交互)从我的主要活动类,我想调整一些"球"属性,在这种情况下改变它的颜色.
我的问题是,当我尝试从我的MainActivity类调用各种方法时,没有任何事情发生(没有错误,应用程序运行但是没有做我想要的)但是如果我从CircleView类中执行它,它可以工作(例如触摸时改变颜色)
这是我的自定义View类(CircleView.java):
public class CircleView extends View {
private int circleColor = Color.GREEN;
private Paint paint;
public CircleView(Context context) {
super(context);
init(context, null);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_SCROLL:
this.circleColor = setRandomColor();
invalidate();
break;
case MotionEvent.ACTION_DOWN:
this.circleColor = setRandomColor();
invalidate();
break;
}
return super.onTouchEvent(event);
}
public CircleView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
private void init(Context context, AttributeSet attrs) {
paint = new Paint();
paint.setAntiAlias(true);
}
public void setCircleColor(int circleColor) {
this.circleColor = circleColor;
invalidate();
}
public int setRandomColor() {
Random random = new Random();
int randomColor = Color.argb(255, random.nextInt(), random.nextInt(), random.nextInt());
return randomColor;
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//...
//someXvalue, someYvalue, someRadius are being set here
//...
paint.setColor(circleColor);
canvas.drawCircle(someXvalue, someYvalue, someRadius, paint);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的MainActivity.java类:
public class MainActivity extends Activity implements
GestureDetector.OnGestureListener {
private GestureDetectorCompat mDetector;
CircleView circle;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDetector = new GestureDetectorCompat(this, this);
circle = new CircleView(this);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
this.mDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
@Override
public boolean onDown(MotionEvent event) {
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent event) {
circle.setCircleColor(circle.setRandomColor(0));
circle.invalidate();
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
我是Android开发和Java的新手.我意识到它可能是Context的东西,这是我还没有完全理解的东西.也可能是TouchEvents的东西.我相信那里的人可以看到我的错误.任何帮助表示赞赏.
您的circle视图不是活动布局的一部分,它只是内存中的一个对象,它没有指向您的活动屏幕的链接所以解决方案
1.)设置circle为Activity的视图
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDetector = new GestureDetectorCompat(this, this);
circle = new CircleView(this);
setContentView(circle);
}
Run Code Online (Sandbox Code Playgroud)
2.)您可以<yourpackagename.CircleView ...attributes .../>在您的标签中创建标签activity_main.xml,然后使用findViewById它在您的活动中初始化它.
| 归档时间: |
|
| 查看次数: |
1224 次 |
| 最近记录: |