自定义View,ViewGroup的使用
定义自己的view,集成View,实现onDraw
package com.example.testcanvers;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
public class CircleCanvas extends View{
public List<CircleInfo> mCircleInfos=new ArrayList<CircleCanvas.CircleInfo>();
Paint paint=new Paint();
public static class CircleInfo
{
private float x,y,radius;
private int color;
public float getX(){return x;}
public void setX(float x){this.x=x;}
public float getY(){return y;}
public void setY(float y){this.y=y;}
public float getRadius(){return radius;}
public void setRadius(float radius){this.radius=radius;}
public int getColor(){return color;}
public void setColor(int color){this.color=color;}
}
public CircleCanvas(Context context)
{
super(context);
}
@Override
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
for(CircleInfo circleinfo : mCircleInfos)
{
paint.setColor(circleinfo.getColor());
paint.setStrokeWidth(1);
paint.setStyle(Style.STROKE);
canvas.drawCircle(circleinfo.getX(), circleinfo.getY(),circleinfo.getRadius(), paint);
Log.v("Paint","Paint Successful!");
}
}
}
写MainActivity.java
package com.example.testcanvers; import java.util.Random; import android.os.Bundle; import android.app.Activity; import android.graphics.Color; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.Toast; import com.example.testcanvers.CircleCanvas.CircleInfo; import com.example.testcanvers.CircleCanvas; public class MainActivity extends Activity { private CircleCanvas mCircleCanvas; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ViewGroup viewGroup=(ViewGroup)getLayoutInflater().inflate(R.layout.activity_main, null); mCircleCanvas=new CircleCanvas(this); viewGroup.addView(mCircleCanvas,new LayoutParams(LayoutParams.FILL_PARENT,350)); setContentView(viewGroup); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void onClick_DrawRandomCircle(View view) { Random random=new Random(); float randomX=(float)(100+random.nextInt(100)); float randomY=(float)(100+random.nextInt(100)); float randomRadius=(float)(20+random.nextInt(100)); int randomColor=0; if(random.nextInt(100)>50) randomColor=Color.BLUE; else { if(random.nextInt(100)>50) randomColor=Color.BLUE; else randomColor=Color.GREEN; } CircleInfo circleInfo=new CircleInfo(); circleInfo.setX(randomX); circleInfo.setY(randomY); circleInfo.setRadius(randomRadius); circleInfo.setColor(randomColor); mCircleCanvas.mCircleInfos.add(circleInfo); mCircleCanvas.invalidate(); Toast.makeText(this, "Successfun", Toast.LENGTH_SHORT).show(); } public void onClick_Clear(View view) { mCircleCanvas.mCircleInfos.clear(); mCircleCanvas.invalidate(); } }
以下是布局文件
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" 6 tools:context=".MainActivity" > 7 <Button 8 android:layout_width="match_parent" 9 android:layout_height="wrap_content" 10 android:text="Draw Random Circle" 11 android:onClick="onClick_DrawRandomCircle"/> 12 <Button 13 android:layout_width="match_parent" 14 android:layout_height="wrap_content" 15 android:text="Clear" 16 android:onClick="onClick_Clear"/> 17 </LinearLayout>

浙公网安备 33010602011771号