80,337
社区成员
发帖
与我相关
我的任务
分享
package com.myAndroid.exercise;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import com.myAndroid.exercise.iTab.OnTabClickListener;
import com.myAndroid.exercise.iTab.TabMember;
public class MainActivity extends Activity
{
public static final String TAG = "SAMPLEAPP";
private static final int TAB_HIGHLIGHT = 1;
private static final int TAB_CHAT = 2;
private static final int TAB_LOOPBACK = 3;
private static final int TAB_REDO = 4;
private iTab mTabs;
private LinearLayout mTabLayout_One;
private LinearLayout mTabLayout_Two;
private LinearLayout mTabLayout_Three;
private LinearLayout mTabLayout_Four;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTabs = (iTab) this.findViewById( R.id.Tabs );
mTabLayout_One = (LinearLayout) this.findViewById( R.id.TabLayout_One );
mTabLayout_Two = (LinearLayout) this.findViewById( R.id.TabLayout_Two );
mTabLayout_Three = (LinearLayout) this.findViewById( R.id.TabLayout_Three );
mTabLayout_Four = (LinearLayout) this.findViewById( R.id.TabLayout_Four );
mTabs.addTabMember( new TabMember( TAB_HIGHLIGHT, "Loopback", R.drawable.loopback ) );
mTabs.addTabMember( new TabMember( TAB_CHAT, "Chat", R.drawable.chat ) );
mTabs.addTabMember( new TabMember( TAB_LOOPBACK, "download", R.drawable.download ) );
mTabs.addTabMember( new TabMember( TAB_REDO, "redo", R.drawable.redo ) );
//初始化状态下显示某一布局
mTabLayout_One.setVisibility( View.VISIBLE );
mTabLayout_Two.setVisibility( View.GONE );
mTabLayout_Three.setVisibility( View.GONE );
mTabLayout_Four.setVisibility( View.GONE );
//点击底部某一选项卡时出现界面
mTabs.setOnTabClickListener( new OnTabClickListener( ) {
@Override
public void onTabClick( int tabId )
{
if( tabId == TAB_HIGHLIGHT )
{
mTabLayout_One.setVisibility( View.VISIBLE );
mTabLayout_Two.setVisibility( View.GONE );
mTabLayout_Three.setVisibility( View.GONE );
mTabLayout_Four.setVisibility( View.GONE );
} else if( tabId == TAB_CHAT )
{
mTabLayout_One.setVisibility( View.GONE );
mTabLayout_Two.setVisibility( View.VISIBLE );
mTabLayout_Three.setVisibility( View.GONE );
mTabLayout_Four.setVisibility( View.GONE );
} else if( tabId == TAB_LOOPBACK )
{
mTabLayout_One.setVisibility( View.GONE );
mTabLayout_Two.setVisibility( View.GONE );
mTabLayout_Three.setVisibility( View.VISIBLE );
mTabLayout_Four.setVisibility( View.GONE );
} else if( tabId == TAB_REDO )
{
mTabLayout_One.setVisibility( View.GONE );
mTabLayout_Two.setVisibility( View.GONE );
mTabLayout_Three.setVisibility( View.GONE );
mTabLayout_Four.setVisibility( View.VISIBLE );
}
}
});
}
}
<?xml version="1.0" encoding="utf-8"?>
<view xmlns:android="http://schemas.android.com/apk/res/android"
class="com.myAndroid.exercise.iRelativeLayout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background = "#C5CCD4FF"
>
<LinearLayout
android:id = "@+id/TabLayout_One"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:layout_above = "@+id/Tabs"
>
<ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content">
<RelativeLayout
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:visibility = "visible"
>
<TabHost
class="com.myAndroid.exercise.iTabHost" //这里是引用那个类。
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabWidget android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"></TabWidget>
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/textview1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="this is a tab"/>
<TextView android:id="@+id/textview2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="this is another tab"/>
<TextView android:id="@+id/textview3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="this is a third tab"/>
</FrameLayout>
</LinearLayout>
</TabHost>
</RelativeLayout>
</ScrollView>
</LinearLayout>
<LinearLayout
android:id = "@+id/TabLayout_Two"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:layout_above = "@+id/Tabs"
>
<ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content">
<RelativeLayout
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:visibility = "visible"
android:layout_above = "@+id/Tabs"
>
<Button
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "HEHE YO"
/>
</RelativeLayout>
</ScrollView>
</LinearLayout>
<LinearLayout
android:id = "@+id/TabLayout_Three"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:layout_above = "@+id/Tabs"
>
<ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content">
<RelativeLayout
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:visibility = "visible"
android:layout_above = "@+id/Tabs"
>
<TextView
android:textColor="@android:color/black"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "Text View o.o!!!"
/>
</RelativeLayout>
</ScrollView>
</LinearLayout>
<LinearLayout
android:id = "@+id/TabLayout_Four"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:layout_above = "@+id/Tabs"
>
<ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content">
<RelativeLayout
android:id = "@+id/TabLayout_Four"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:visibility = "visible"
android:layout_above = "@+id/Tabs"
>
<TextView
android:textColor="@android:color/black"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "Well .. It's obvious - isn't it?"
/>
</RelativeLayout>
</ScrollView>
</LinearLayout>
<view
class="com.myAndroid.exercise.iTab"
android:id="@+id/Tabs"
android:layout_width = "fill_parent"
android:layout_height = "49px"
android:layout_alignParentBottom = "true"
/>
</view>
mTabHost.setOnTabChangedListener(new OnTabChangeListener()
{
// TODO Auto-generated method stub
@Override
public void onTabChanged(String tabId)
{
}
});
//点击底部某一选项卡时出现界面
mTabs.setOnTabClickListener( new OnTabClickListener( ) {
@Override
public void onTabClick( int tabId )
{
if( tabId == TAB_HIGHLIGHT )
{
mTabLayout_One.setVisibility( View.VISIBLE );
mTabLayout_Two.setVisibility( View.GONE );
mTabLayout_Three.setVisibility( View.GONE );
mTabLayout_Four.setVisibility( View.GONE );
} else if( tabId == TAB_CHAT )
{
mTabLayout_One.setVisibility( View.GONE );
mTabLayout_Two.setVisibility( View.VISIBLE );
mTabLayout_Three.setVisibility( View.GONE );
mTabLayout_Four.setVisibility( View.GONE );
} else if( tabId == TAB_LOOPBACK )
{
mTabLayout_One.setVisibility( View.GONE );
mTabLayout_Two.setVisibility( View.GONE );
mTabLayout_Three.setVisibility( View.VISIBLE );
mTabLayout_Four.setVisibility( View.GONE );
} else if( tabId == TAB_REDO )
{
mTabLayout_One.setVisibility( View.GONE );
mTabLayout_Two.setVisibility( View.GONE );
mTabLayout_Three.setVisibility( View.GONE );
mTabLayout_Four.setVisibility( View.VISIBLE );
}
Dialog dialog = new AlertDialog.Builder(MainActivity.this)
.setTitle("提示")
.setMessage("当前选中:"+tabId+"标签")
.setPositiveButton("确定",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
dialog.cancel();
}
}).create();//创建按钮
dialog.show();
}
});
package com.myAndroid.exercise;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.TabActivity;
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
public class iTabHost extends TabActivity
{
//声明TabHost对象
TabHost mTabHost;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//取得TabHost对象
mTabHost = getTabHost();
/* 为TabHost添加标签 */
//新建一个newTabSpec(newTabSpec)
//设置其标签和图标(setIndicator)
//设置内容(setContent)
mTabHost.addTab(mTabHost.newTabSpec("tab_test1")
.setIndicator("TAB 1",getResources().getDrawable(R.drawable.img1))
.setContent(R.id.textview1));
mTabHost.addTab(mTabHost.newTabSpec("tab_test2")
.setIndicator("TAB 2",getResources().getDrawable(R.drawable.img2))
.setContent(R.id.textview2));
mTabHost.addTab(mTabHost.newTabSpec("tab_test3")
.setIndicator("TAB 3",getResources().getDrawable(R.drawable.img3))
.setContent(R.id.textview3));
//设置TabHost的背景颜色
mTabHost.setBackgroundColor(Color.argb(150, 22, 70, 150));
//设置TabHost的背景图片资源
//mTabHost.setBackgroundResource(R.drawable.bg0);
//设置当前显示哪一个标签
mTabHost.setCurrentTab(0);
//标签切换事件处理,setOnTabChangedListener
mTabHost.setOnTabChangedListener(new OnTabChangeListener()
{
// TODO Auto-generated method stub
@Override
public void onTabChanged(String tabId)
{
/* 这里报错 无法显示 Dialog
* 主要是 Dialog dialog = new AlertDialog.Builder(MainActivity.this) 报错
* Dialog dialog = new AlertDialog.Builder(MainActivity.this)
.setTitle("提示")
.setMessage("当前选中:"+tabId+"标签")
.setPositiveButton("确定",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
dialog.cancel();
}
}).create();//创建按钮
dialog.show();*/
}
});
}
}
package com.myAndroid.exercise;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.RelativeLayout;
//注意,还是声明为静态
public class iRelativeLayout extends RelativeLayout
{
private Paint mPaint;
private Rect mRect;
public iRelativeLayout( Context context, AttributeSet attrs )
{
super(context, attrs);
mRect = new Rect( );
mPaint = new Paint( );
mPaint.setStyle( Paint.Style.FILL_AND_STROKE );
mPaint.setColor( 0xFFCBD2D8 );
}
@Override
protected void onDraw( Canvas canvas )
{
super.onDraw( canvas );
canvas.drawColor( 0xFFC5CCD4 );
this.getDrawingRect( mRect );
for( int i = 0; i < mRect.right; i += 7 ) //绘制屏幕背景的纹理效果
{
canvas.drawRect( mRect.left + i, mRect.top, mRect.left + i + 2, mRect.bottom, mPaint );
}
}
}
package com.myAndroid.exercise;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.Paint.Align;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ImageView;
//MainActivity这个类里面的两个static类,看我写的注释和上篇博客的内容应该都能理解。
//其中还定义了触摸事件,实现点击tab出现不同布局的效果。接下来我们只需要在我们的layout上添加就可以了
public class iTab extends ImageView
{
private Paint mPaint; //背景画笔
private Paint mActiveTextPaint;//选中
private Paint mInactiveTextPaint;//未选中
private ArrayList<TabMember> mTabMembers;//tab成员
private int mActiveTab;
private OnTabClickListener mOnTabClickListener = null;
public iTab( Context context, AttributeSet attrs ) //构造器,View下构造器有三种方式,在xml中配置必须实现这种方式
{
super(context, attrs);
mTabMembers = new ArrayList<iTab.TabMember>( );
mPaint = new Paint( );
mActiveTextPaint = new Paint( );//Paint类包含样式和颜色有关如何绘制几何形状,文本和位图的信息
mInactiveTextPaint = new Paint( );
mPaint.setStyle( Paint.Style.FILL ); //设置样式
mPaint.setColor( 0xFFFFFF00 );//设置颜色
mActiveTextPaint.setTextAlign( Align.CENTER );//设置文本对齐
mActiveTextPaint.setTextSize( 12 );//设置大小
mActiveTextPaint.setColor( 0xFFFFFFFF );//设置颜色
mActiveTextPaint.setFakeBoldText( true );//仿“粗体”设置
mInactiveTextPaint.setTextAlign( Align.CENTER );//设置文本对齐
mInactiveTextPaint.setTextSize( 12 );//设置大小
mInactiveTextPaint.setColor( 0xFF999999 );//设置颜色
mInactiveTextPaint.setFakeBoldText( true );//仿“粗体”设置
mActiveTab = 0;
}
@Override
protected void onDraw( Canvas canvas )
{
Log.d( VIEW_LOG_TAG, "iTab onDraw start" );
super.onDraw( canvas );
Rect r = new Rect( );
this.getDrawingRect( r );
// 计算每个标签能使用多少像素
int singleTabWidth = r.right / ( mTabMembers.size( ) != 0 ? mTabMembers.size( ) : 1 );
Log.d( VIEW_LOG_TAG, "iTab: SingleTabWidth: " + singleTabWidth );
// 绘制背景
canvas.drawColor( 0xFF000000 );
mPaint.setColor( 0xFF434343 );
canvas.drawLine( r.left, r.top + 1, r.right, r.top + 1, mPaint );
int color = 46;
for( int i = 0; i < 24; i++ )
{
mPaint.setARGB( 255, color, color, color );
canvas.drawRect( r.left, r.top + i + 1, r.right, r.top + i + 2, mPaint );
color--;
}
// 绘制每一个tab
for( int i = 0; i < mTabMembers.size( ); i++ )
{
TabMember tabMember = mTabMembers.get( i );
Bitmap icon = BitmapFactory.decodeResource( getResources( ), tabMember.getIconResourceId( ) );
Bitmap iconColored = Bitmap.createBitmap( icon.getWidth(), icon.getHeight(), Bitmap.Config.ARGB_8888 );
Paint p = new Paint( Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
Canvas iconCanvas = new Canvas( );
iconCanvas.setBitmap( iconColored );
if( mActiveTab == i )//为已选中的tab绘制一个白蓝的渐变色,未选中的绘制一个白灰的渐变色
{
p.setShader( new LinearGradient( 0, 0, icon.getWidth(), icon.getHeight(), 0xFFFFFFFF, 0xFF54C7E1, Shader.TileMode.CLAMP ) );
}
else {
p.setShader( new LinearGradient( 0, 0, icon.getWidth(), icon.getHeight(), 0xFFA2A2A2, 0xFF5F5F5F, Shader.TileMode.CLAMP ) );
}
iconCanvas.drawRect( 0, 0, icon.getWidth( ), icon.getHeight( ), p );
for( int x = 0; x < icon.getWidth(); x++ )
{
for( int y = 0; y < icon.getHeight(); y++ )
{
if( ( icon.getPixel(x, y) & 0xFF000000 ) == 0 )
{
iconColored.setPixel( x, y, 0x00000000 );
}
}
}
// 计算tab图片的位置
int tabImgX = singleTabWidth * i + ( singleTabWidth / 2 - icon.getWidth( ) / 2 );
// 绘制tab图片 选中的和未选中的
if( mActiveTab == i )
{
mPaint.setARGB( 37, 255, 255, 255 );
canvas.drawRoundRect( new RectF( r.left + singleTabWidth * i + 3, r.top + 3, r.left + singleTabWidth * ( i + 1 ) - 3, r.bottom - 2 ), 5, 5, mPaint );
canvas.drawBitmap( iconColored, tabImgX , r.top + 5, null );
canvas.drawText( tabMember.getText( ), singleTabWidth * i + ( singleTabWidth / 2), r.bottom - 2, mActiveTextPaint );
} else
{
canvas.drawBitmap( iconColored, tabImgX , r.top + 5, null );
canvas.drawText( tabMember.getText( ), singleTabWidth * i + ( singleTabWidth / 2), r.bottom - 2, mInactiveTextPaint );
}
}
Log.d( VIEW_LOG_TAG, "iTab onDraw finished" );
}
/* * 触摸事件 */
@Override
public boolean onTouchEvent( MotionEvent motionEvent )
{
Rect r = new Rect( );
this.getDrawingRect( r );
float singleTabWidth = r.right / ( mTabMembers.size( ) != 0 ? mTabMembers.size( ) : 1 );
int pressedTab = (int) ( ( motionEvent.getX( ) / singleTabWidth ) - ( motionEvent.getX( ) / singleTabWidth ) % 1 );
mActiveTab = pressedTab;
if( this.mOnTabClickListener != null)
{
this.mOnTabClickListener.onTabClick( mTabMembers.get( pressedTab ).getId( ) );
}
this.invalidate();
return super.onTouchEvent( motionEvent );
}
void addTabMember( TabMember tabMember )
{
mTabMembers.add( tabMember );
}
void setOnTabClickListener( OnTabClickListener onTabClickListener )
{
mOnTabClickListener = onTabClickListener;
}
//处理tab成员
public static class TabMember
{
protected int mId;
protected String mText;
protected int mIconResourceId;
TabMember( int Id, String Text, int iconResourceId )
{
mId = Id;
mIconResourceId = iconResourceId;
mText = Text;
}
public int getId( )
{
return mId;
}
public String getText( )
{
return mText;
}
public int getIconResourceId( )
{
return mIconResourceId;
}
public void setText( String Text )
{
mText = Text;
}
public void setIconResourceId( int iconResourceId )
{
mIconResourceId = iconResourceId;
}
}
public static interface OnTabClickListener
{
public abstract void onTabClick( int tabId );
}
}