把view嵌入xml的细节

一、把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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值