这是CustomView.java里的
public class CustomView extends View {
public CustomView(Context context){
super(context);
}
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeWidth(10f);
paint.setAntiAlias(true);
canvas.drawLine(X,Y,300,300,paint);
}
}
这是RandomActivity.java里的
public class RandomActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Random();
}
public void Random(){
int min=100;
int max=1000;
Random random=new Random();
int X=random.nextInt(max)%(max-min+1)+min;
int Y=random.nextInt(max)%(max-min+1)+min;
System.out.println(X);
System.out.println(Y);
}
}
这是MainActivity.java里的
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout layout = (LinearLayout)findViewById(R.id.wang);
CustomView view=new CustomView(this);
layout.addView(view);
}
}
我的想法是在RandomActivity.java里面生成随机数,在CustomView.java里面利用生成的X,Y作为起点进行画图。最后呈现的效果是一个起点随机 终点确定的线,在这里面应该是需要不断地刷新而后画图。
但是我把在RandomActivity.java里生成的X,Y放进CustomView.java里是错的 可是我已经将X,Y设置成了全局变量 不是应该可以用的吗
谢谢大家指点 刚开始学
你的CustomView要改一下, 不要在onDraw方法里面去new Paint ,这样会导致内存抖动。
public class CustomView extends View {
private Paint paint;
private int x, y;
public CustomView(Context context){
super(context);
paint = new Paint();
paint.setColor(Color.RED);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeWidth(10f);
paint.setAntiAlias(true);
}
public void setPoint(int x, int y) {
this.x = x;
this.y = y;
invalidate();
}
protected void onDraw(Canvas canvas) {
canvas.drawLine(x,y,300,300,paint);
}
}
在activity中调用可以采用定时任务结合handler去刷新你的CustomView; 在onDestroy方法移除timer、timeTask、handler避免内存泄漏。
public class TestActivity extends AppCompatActivity {
private TimerTask timerTask = new TimerTask() {
@Override
public void run() {
Message message = Message.obtain();
message.what = 1;
handler.sendMessage(message);
}
};
private Timer timer = new Timer();
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 1) {
ranDom();
}
}
};
private CustomView view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
LinearLayout layout = (LinearLayout) findViewById(R.id.wang);
view = new CustomView(this);
layout.addView(view);
timer.schedule(timerTask, 100, 100);
}
public void ranDom() {
int min = 100;
int max = 1000;
Random random = new Random();
int X = random.nextInt(max) % (max - min + 1) + min;
int Y = random.nextInt(max) % (max - min + 1) + min;
System.out.println(X);
System.out.println(Y);
view.setPoint(X, Y);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (handler != null) {
handler.removeMessages(1);
}
if (timer != null) {
timer.cancel();
timer = null;
}
if (timerTask != null) {
timerTask.cancel();
timerTask = null;
}
}
}
你把RandomActivity不用写成Activity,就是不用继承Activity,使用纯Java的方式。
你这里的问题在于,你的RandomActivity并没有执行。你对Android的基础可能还没掌握,可以通过log或Debug调试的方式一点点去试错,或者学习下Activity的生命周期可能会对你有所帮助。