一、把View嵌入xml布局要注意设置宽高、不要用自适应、因为view默认也是填充整个屏幕。
二、如果是嵌入多个xml要注意判断View里面的对象是否为空。
三、要引用 这个构造方法 View类名(Context context,AttributeSet attr),如TopSurFV(Context context,AttributeSet attr);
四、事件view的touch事件在没有说明id ,Activity是得不到点击事件的,可以通过context传入判断Activity对象。
五、在布局的时候要指明顺序、要不然会出现,只显示到view就没有的情况。用table布局的时候,系统会自动帮你识别顺序。
希望看到的朋友在此基础上,补充和修改。也请告诉我一声哦。。
MainActivity.class>>>>>>>>>>>>>>>>>>>>>>>>
package org.lun.main;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener{
/** Called when the activity is first created. */
private Button buttonok;
private Button buttonlogin;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fullscreen();
setContentView(R.layout.main);
buttonok=(Button) findViewById(R.id.enter);
buttonlogin=(Button) findViewById(R.id.login);
buttonok.setOnClickListener(this);
buttonlogin.setOnClickListener(this);
}
public void fullscreen(){
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN ,
WindowManager.LayoutParams. FLAG_FULLSCREEN);
}
public boolean onTouchEvent(MotionEvent event){
if(event.getX()>=2&&event.getX()<30){
if(event.getY()>2&&event.getY()<30){
}
}
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
TopSurFV.class>>>>>>>>>>>>>>>>>>>>>>
package org.lun.view;
import org.lun.main.R;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class TopSurFV extends SurfaceView implements SurfaceHolder.Callback,Runnable{
private Bitmap bitmap;
private Bitmap bmptopglugin;
private SurfaceHolder surfaceHolder;
private static int state;
private static int isshow=1;
private static final int SLEEPTIME=50;
private boolean isflag;
private Context context;
public TopSurFV(Context context) {
super(context);
}
public TopSurFV(Context context,AttributeSet attr)
{
super(context,attr);
this.context=context;
surfaceHolder=getHolder();
surfaceHolder.addCallback(this);
setFocusable(true);
inibmp();
}
public void inibmp(){
bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.top);
bmptopglugin=BitmapFactory.decodeResource(getResources(), R.drawable.topplugin);
}
public void Draw(){
Canvas canvas=surfaceHolder.lockCanvas();
Paint paint=new Paint();
if(bitmap==null){
inibmp();
}
if(canvas!=null){
canvas.drawBitmap(bitmap, 0, 0, paint);
if(state==1){
canvas.drawBitmap(bmptopglugin, 10, 10, paint);
}
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
public boolean onTouchEvent(MotionEvent event){
if(event.getX()>=10&&event.getX()<40){
if(event.getY()>10&&event.getY()<40){
state=1;
}
}
postInvalidate();
return true;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
isflag=true;
new Thread(this).start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
isflag=false;
}
@Override
public void run() {
while (isflag)
{
try
{
Thread.sleep(SLEEPTIME);
Draw();
state=0;
}
catch (Exception e)
{
}
}
}
}
main.xml>>>>>>>>>>>>>>>>
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/homeback"
android:stretchColumns="1">
<org.lun.view.TopSurFV
android:id="@+id/enterActivity"
android:layout_width="fill_parent"
android:layout_height="35px"
/>
<TextView
android:text="@string/welcomeenter"
android:textStyle="bold"
android:layout_marginTop="10px"
android:textSize="20px"
android:gravity="center"
/>
<TableRow
>
<TextView
android:text="@string/user"
android:textStyle="bold"
android:gravity="right"
android:textSize="15px"
android:padding="3dip" />
<EditText android:id="@+id/username"
android:padding="3dip"
android:scrollHorizontally="true" />
</TableRow>
<TableRow >
<TextView
android:text="@string/password"
android:textStyle="bold"
android:gravity="right"
android:textSize="15px"
android:padding="3dip" />
<EditText android:id="@+id/password"
android:password="true"
android:padding="3dip"
android:scrollHorizontally="true" />
</TableRow>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/la2"
android:gravity="center"
android:layout_marginRight="0px"
>
<Button android:id="@+id/enter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/ok"
/>
<Button android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/login"
/>
</LinearLayout>
</TableLayout>
二、如果是嵌入多个xml要注意判断View里面的对象是否为空。
三、要引用 这个构造方法 View类名(Context context,AttributeSet attr),如TopSurFV(Context context,AttributeSet attr);
四、事件view的touch事件在没有说明id ,Activity是得不到点击事件的,可以通过context传入判断Activity对象。
五、在布局的时候要指明顺序、要不然会出现,只显示到view就没有的情况。用table布局的时候,系统会自动帮你识别顺序。
希望看到的朋友在此基础上,补充和修改。也请告诉我一声哦。。
MainActivity.class>>>>>>>>>>>>>>>>>>>>>>>>
package org.lun.main;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener{
/** Called when the activity is first created. */
private Button buttonok;
private Button buttonlogin;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fullscreen();
setContentView(R.layout.main);
buttonok=(Button) findViewById(R.id.enter);
buttonlogin=(Button) findViewById(R.id.login);
buttonok.setOnClickListener(this);
buttonlogin.setOnClickListener(this);
}
public void fullscreen(){
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN ,
WindowManager.LayoutParams. FLAG_FULLSCREEN);
}
public boolean onTouchEvent(MotionEvent event){
if(event.getX()>=2&&event.getX()<30){
if(event.getY()>2&&event.getY()<30){
}
}
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
TopSurFV.class>>>>>>>>>>>>>>>>>>>>>>
package org.lun.view;
import org.lun.main.R;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class TopSurFV extends SurfaceView implements SurfaceHolder.Callback,Runnable{
private Bitmap bitmap;
private Bitmap bmptopglugin;
private SurfaceHolder surfaceHolder;
private static int state;
private static int isshow=1;
private static final int SLEEPTIME=50;
private boolean isflag;
private Context context;
public TopSurFV(Context context) {
super(context);
}
public TopSurFV(Context context,AttributeSet attr)
{
super(context,attr);
this.context=context;
surfaceHolder=getHolder();
surfaceHolder.addCallback(this);
setFocusable(true);
inibmp();
}
public void inibmp(){
bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.top);
bmptopglugin=BitmapFactory.decodeResource(getResources(), R.drawable.topplugin);
}
public void Draw(){
Canvas canvas=surfaceHolder.lockCanvas();
Paint paint=new Paint();
if(bitmap==null){
inibmp();
}
if(canvas!=null){
canvas.drawBitmap(bitmap, 0, 0, paint);
if(state==1){
canvas.drawBitmap(bmptopglugin, 10, 10, paint);
}
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
public boolean onTouchEvent(MotionEvent event){
if(event.getX()>=10&&event.getX()<40){
if(event.getY()>10&&event.getY()<40){
state=1;
}
}
postInvalidate();
return true;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
isflag=true;
new Thread(this).start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
isflag=false;
}
@Override
public void run() {
while (isflag)
{
try
{
Thread.sleep(SLEEPTIME);
Draw();
state=0;
}
catch (Exception e)
{
}
}
}
}
main.xml>>>>>>>>>>>>>>>>
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/homeback"
android:stretchColumns="1">
<org.lun.view.TopSurFV
android:id="@+id/enterActivity"
android:layout_width="fill_parent"
android:layout_height="35px"
/>
<TextView
android:text="@string/welcomeenter"
android:textStyle="bold"
android:layout_marginTop="10px"
android:textSize="20px"
android:gravity="center"
/>
<TableRow
>
<TextView
android:text="@string/user"
android:textStyle="bold"
android:gravity="right"
android:textSize="15px"
android:padding="3dip" />
<EditText android:id="@+id/username"
android:padding="3dip"
android:scrollHorizontally="true" />
</TableRow>
<TableRow >
<TextView
android:text="@string/password"
android:textStyle="bold"
android:gravity="right"
android:textSize="15px"
android:padding="3dip" />
<EditText android:id="@+id/password"
android:password="true"
android:padding="3dip"
android:scrollHorizontally="true" />
</TableRow>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/la2"
android:gravity="center"
android:layout_marginRight="0px"
>
<Button android:id="@+id/enter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/ok"
/>
<Button android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/login"
/>
</LinearLayout>
</TableLayout>