android仿新浪引導界麵
最近在研究如何做出仿微信,仿新浪等應用,第一次安裝使用的使用展示應用程序的新特性和用法。
實現功能:左右手勢滑屏
底部小圓點隨當前顯示頁跳動
浮動按鈕顯示。當觸屏事件發生顯示,否則就漸漸消失
先轉個文章:https://blog.csdn.net/feng88724/article/details/6973662
第一種: ViewFlipper + GestureDetector
第二種: ActivityGroup + GestureDetector
第三種: ViewPager (Android3.0+)
第四種: ViewFlow (開源項目)
話不多說,先放上效果圖
向右滑動,或者點擊按鈕向右
怎麼樣,是不是很心動~~~!哈哈、
實現左右滑屏是需要一個叫做ViewPager的東西。具體ViewPager怎麼用我就不贅述了。(PS注意導入ViewPager的兼容包)
接下來是代碼:
首先在main.xml中聲明ViewPager:
<LinearLayout
android:
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
和一個viewGroup放小圓點
<LinearLayout
android:
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="40dp"
android:gravity="center_horizontal"
android:orientation="horizontal" >
</LinearLayout>
接著在item01.xml等幾個xml中放置要顯示的圖片,因為幾個都一樣,就不都貼上來了。
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/feature_guide_0" >
</ImageView>
接下來是核心代碼:
public class GuideViewActivity extends Activity {
private ViewPager viewPager;
private ArrayList<View> pageViews;
private ImageView imageView;
private ImageView[] imageViews;
// 包裹滑動圖片LinearLayout
private ViewGroup main;
// 包裹小圓點的LinearLayout
private ViewGroup group;
//左箭頭按鈕
private ImageView imageViewLeft;
//右箭頭按鈕
private ImageView imageViewRight;
//當前頁碼
private int currentIndex;
//ImageView的alpha值
private int mAlpha = 0;
private boolean isHide;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//將要顯示的圖片放到ArrayList當中,存到適配器中
LayoutInflater inflater = getLayoutInflater();
pageViews = new ArrayList<View>();
pageViews.add(inflater.inflate(R.layout.item01, null));
...
imageViews = new ImageView[pageViews.size()];
main = (ViewGroup)inflater.inflate(R.layout.main, null);
group = (ViewGroup)main.findViewById(R.id.viewGroup);
viewPager = (ViewPager)main.findViewById(R.id.guidePages);
imageViewLeft = (ImageView)main.findViewById(R.id.imageView1);
imageViewRight = (ImageView)main.findViewById(R.id.imageView2);
imageViewLeft.setAlpha(0);
imageViewRight.setAlpha(0);
//將小圓點放到imageView數組當中
for (int i = 0; i < pageViews.size(); i++) {
imageView = new ImageView(GuideViewActivity.this);
imageView.setLayoutParams(new LayoutParams(20,20));
imageView.setPadding(20, 0, 20, 0);
imageViews[i] = imageView;
if (i == 0) {
//默認選中第一張圖片
imageViews[i].setBackgroundResource(R.drawable.page_indicator_focused);
} else {
imageViews[i].setBackgroundResource(R.drawable.page_indicator);
}
group.addView(imageViews[i]);
}
setContentView(main);
viewPager.setAdapter(new GuidePageAdapter());
viewPager.setOnPageChangeListener(new GuidePageChangeListener());
imageViewLeft.setOnClickListener(new ButtonListener());
imageViewRight.setOnClickListener(new ButtonListener());
}
//左右切換屏幕的按鈕監聽器
class ButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int showNext=0;
if(v.getId() == R.id.imageView1) {
System.out.println("點擊了向左的按鈕");
if(currentIndex ==0 )
showNext = currentIndex;
else
showNext = currentIndex-1;
viewPager.setCurrentItem(showNext);
}
if(v.getId() == R.id.imageView2){
System.out.println("點擊了向右的按鈕");
if(currentIndex == imageViews.length)
showNext = currentIndex;
else
showNext = currentIndex+1;
viewPager.setCurrentItem(showNext);
}
System.out.println("當前頁碼:"+showNext);
}
}
/**
* 設置按鈕漸顯效果
*/
private Handler mHandler = new Handler()
{
public void handleMessage(Message msg) {
if(msg.what==1 && mAlpha<255){
//通過設置不透明度設置按鈕的漸顯效果
mAlpha += 50;
if(mAlpha>255)
mAlpha=255;
imageViewLeft.setAlpha(mAlpha);
imageViewLeft.invalidate();
imageViewRight.setAlpha(mAlpha);
imageViewRight.invalidate();
if(!isHide && mAlpha<255)
mHandler.sendEmptyMessageDelayed(1, 100);
}else if(msg.what==0 && mAlpha>0){
mAlpha -= 3;
if(mAlpha<0)
mAlpha=0;
imageViewLeft.setAlpha(mAlpha);
imageViewLeft.invalidate();
imageViewRight.setAlpha(mAlpha);
imageViewRight.invalidate();
if(isHide && mAlpha>0)
mHandler.sendEmptyMessageDelayed(0, 2);
}
}
};
private void showImageButtonView(){
isHide = false;
mHandler.sendEmptyMessage(1);
}
private void hideImageButtonView(){
new Thread(){
public void run() {
try {
isHide = true;
mHandler.sendEmptyMessage(0);
} catch (Exception e) {
;
}
}
}.start();
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
System.out.println("this is dispatch");
System.out.println("觸碰屏幕");
switch (ev.getAction()) {
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_DOWN:
showImageButtonView();
break;
case MotionEvent.ACTION_UP:
hideImageButtonView();
break;
}
return super.dispatchTouchEvent(ev);
}
// 指引頁麵數據適配器,實現適配器方法
class GuidePageAdapter extends PagerAdapter {
@Override
public int getCount() {
return pageViews.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public int getItemPosition(Object object) {
// TODO Auto-generated method stub
return super.getItemPosition(object);
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
// TODO Auto-generated method stub
((ViewPager) arg0).removeView(pageViews.get(arg1));
}
@Override
public Object instantiateItem(View arg0, int arg1) {
// TODO Auto-generated method stub
((ViewPager) arg0).addView(pageViews.get(arg1));
return pageViews.get(arg1);
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
// TODO Auto-generated method stub
}
@Override
public Parcelable saveState() {
// TODO Auto-generated method stub
return null;
}
@Override
public void startUpdate(View arg0) {
// TODO Auto-generated method stub
}
@Override
public void finishUpdate(View arg0) {
// TODO Auto-generated method stub
}
}
// 指引頁麵更改事件監聽器,左右滑動圖片時候,小圓點變換顯示當前圖片位置
class GuidePageChangeListener implements OnPageChangeListener {
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int arg0) {
currentIndex = arg0;
for (int i = 0; i < imageViews.length; i++) {
imageViews[arg0].setBackgroundResource(R.drawable.page_indicator_focused);
if (arg0 != i) {
imageViews[i].setBackgroundResource(R.drawable.page_indicator);
}
}
}
}
}
啊~到這裏就都實現了~
最後更新:2017-04-02 17:09:26