Android開發之自定義控制元件--ViewPager
package com.itheima18.viewpager; import java.util.ArrayList; import java.util.Timer; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; public class MainActivity extends Activity { private ViewPager viewPager; private TextView title; private int[] imageIds; private ArrayList images; private String[] titles; private ArrayList dots; private MyPagerAdapter adapter; private int oldPosition = 0;// 上一次圓點的位置 private ScheduledExecutorService scheduledExecutor; private int currentIndex = 0; // 當前頁面的位置 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); initView(); } // 準備初始化資料 private void initData() { // 圖片 imageIds = new int[] { R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e }; // 用來顯示的圖片 images = new ArrayList(); for (int i = 0; i < imageIds.length; i++) { ImageView imageView = new ImageView(getApplicationContext()); imageView.setImageResource(imageIds[i]); images.add(imageView); } // 文字 titles = new String[] { "鞏俐不低俗,我就不能低俗", "撲樹又回來啦!再唱經典老歌引萬人大合唱", "揭祕北京電影如何升級", "樂視網TV版大派送", "熱血屌絲的反殺" }; // 圓點 dots = new ArrayList(); dots.add(findViewById(R.id.dot_0)); dots.add(findViewById(R.id.dot_1)); dots.add(findViewById(R.id.dot_2)); dots.add(findViewById(R.id.dot_3)); dots.add(findViewById(R.id.dot_4)); } private void initView() { viewPager = (ViewPager) findViewById(R.id.viewPager); title = (TextView) findViewById(R.id.title); title.setText(titles[0]); adapter = new MyPagerAdapter(); viewPager.setAdapter(adapter); viewPager.setOnPageChangeListener(new MyOnPageChangeListener()); } private class MyOnPageChangeListener 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 position) { // 記錄當前頁面 currentIndex = position; // 文字更新 title.setText(titles[position % images.size()]); // 圓點更新 // 更新當前頁面為白色的圓點 dots.get(position % images.size()).setBackgroundResource( R.drawable.dot_focused); // 更新上一個頁面為灰色的圓點 dots.get(oldPosition % images.size()).setBackgroundResource( R.drawable.dot_normal); // 更新上一個頁面的位置 oldPosition = position; } } private class MyPagerAdapter extends PagerAdapter { @Override public int getCount() { // return images.size(); return Integer.MAX_VALUE; } // 判斷當前頁面顯示的資料 與 新頁面的資料是否相同 @Override public boolean isViewFromObject(View arg0, Object arg1) { // TODO Auto-generated method stub return arg0 == arg1; } // 初始化資料 @Override public Object instantiateItem(ViewGroup viewPager, int position) { // TODO Auto-generated method stub // viewPager.addView(images.get(position)); viewPager.addView(images.get(position % images.size())); return images.get(position % images.size()); } // 銷燬資料 @Override public void destroyItem(ViewGroup viewPager, int position, Object object) { // TODO Auto-generated method stub // super.destroyItem(container, position, object); viewPager.removeView(images.get(position % images.size())); } } @Override protected void onStart() { super.onStart(); // 啟動切換圖片 scheduledExecutor = Executors.newSingleThreadScheduledExecutor(); scheduledExecutor.scheduleAtFixedRate(new MyPagerTask(), 2, 2, TimeUnit.SECONDS); } // 切換圖片任務類 private class MyPagerTask implements Runnable { @Override public void run() { // 切換頁面 // currentIndex = (currentIndex + 1) % images.size(); currentIndex++; // viewPager.setCurrentItem(item);//設定當前頁面 // 更新UI Handler handler.sendEmptyMessage(0); } } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // super.handleMessage(msg); // 切換viewPager當前頁面 viewPager.setCurrentItem(currentIndex); } }; @Override protected void onStop() { super.onStop(); // 停止切換圖片 scheduledExecutor.shutdown(); } }
相關推薦
Android開發之自定義控制元件--ViewPager
package com.itheima18.viewpager; import java.util.ArrayList; import java.util.Timer; import java.util.concurrent.Executors; import java.util.concurrent.Sc
Android 開發之自定義控制元件開發-01
最近一直在忙於公司的專案,因為要去現場測試正式使用,專案不大但是經手了三個人,到我這裡只能去填坑了,不說這個了,說一下今天得主題,自定義控制元件之基本圖形繪製。 我們平時畫圖需要兩種工具:紙和筆。在Android中 Paint 就是畫筆,而Canvas類就是紙,在這裡叫做畫布。 所以
Android 開發之自定義控制元件開發-02
1.畫筆的基本設定 : 1.setColor() 該函式的作用是設定畫筆顏色,完整的函式宣告如下: void setColor(int color) 我們知道,一種顏色是由紅、綠、藍三色合成出來的,所以引數 color 只能取8位的0xAARRGGBB樣式顏色值。 其中:
Android開發之自定義控制元件(一)---onMeasure詳解
話說一個有十年的程式設計經驗的老漢,決定改行書法,在一個熱火炎炎的中午,老漢拿著毛筆,在一張白紙上寫了個“Hello World!”,從此開啟了他的書法旅程。那麼問題來了請問自定義一個控制元件需要怎樣的流程?我們經常說自定義控制元件,那麼究竟怎樣去自定義一
Android軟體開發之 自定義控制元件
Android軟體開發之 自定義控制元件 雖然Android系統提供了各種各樣的控制元件供我們開發使用,但在實際的開發中,系統提供的控制元件有時候不能滿足我們的需求,這時我們就需要自定義一個控制元件。 下面的例子就來自定義一個簡單的Button: 首先是佈局,image_btn.xml: <?xml
Android開發筆記之自定義控制元件(物流時間軸的實現)
最近修改專案遇到檢視物流這個需求,經過一個下午的時間的終於搞定,趁著這個時間點,趕快把這個功能抽取出來,方便大家以後開發的需要,幫助到更多的人 先看效果圖,如下 看完之後,分析可知道,主要是兩部分,一個頭部和一個body. 那我們最主要的工作就是bod
android開發之自定義TextView設定字間距以及通過TextView控制元件屬性設定行間距
眾所周知,我們的TextView控制元件是沒有設定字間距的屬性滴!為了現實這一夢想,我玩起來了自定義TextView,從而來設定字間距: 自定義TextView設定字間距 第一步:建立自定義TextView: package com.zanel
Android UI高階之自定義控制元件
在android中有許多控制元件,比如editview、button等,但是,有時這些控制元件並不能滿足我們的需求,這時,我們就需要去自定義一個控制元件來滿足我們的需要,下面給出一個仿360加速球的demo. 1、首先,來看一下360加速球的效果 2、
iOS開發學習-自定義控制元件賦值問題--在model的set方法中給控制元件賦值
在自定義控制元件的過程中,剛開始的時候碰到問題是如何給各控制元件動態賦值,最初的想法是把各控制元件屬性放在.h檔案中定義.然後在控制器內獲取資料一一賦值(可行),但是這樣就增加了控制器中的程式碼,比如給定一個場景: collectionViewCell中,有10個控制元件,需要顯示10個數據,這
讓你的app提升一個檔次-Android酷炫自定義控制元件
這是我近期整理的比較酷炫並且我們會經常用到的custom view,也有一些不是custom view,但是也是android UI相關的,實現了酷炫UI效果的開源庫,合理利用這些開源庫,可以讓你的app提升一個檔次!總結的專案最後維護時間一般不會超過6個月,會持續更新。部落格可能不能實
一起Talk Android吧(第一百回:Android中使用自定義控制元件)
各位看官們,大家好,上一回中咱們說的是Android中使用自定義佈局的例子,這一回說的例子是Android中使用自定義控制元件。閒話休提,言歸正轉。讓我們一起Talk Android吧! 看官們,我們在上一回中通過自定義佈局巧妙地實現了分隔線,不過這個分隔線中看
android 8.0 自定義控制元件onmesure獲取寬度為0
最近專案需要適配8.0版本,自定義控制元件出現了下面的問題 第一次顯示此彈窗字型出現了偏移,找到原因是textpaint在繪製文字的時候 canvas.drawText(itemText, x + (controlWidth / 2) -textRect.width
Android開發之自定義可清空內容的EditText
在開發過程中不可避免的總會遇到比如登入註冊、使用者資訊修改等,這時候又是不可避免的會用到EditText控制元件。這個控制元件的使用頻率雖然幾乎類似我們吃飯用“筷子”的頻率,but能不能用出花樣
Android開發之自定義圓角矩形圖片ImageView
android中的ImageView只能顯示矩形的圖片,這樣一來不能滿足我們其他的需求,比如要顯示圓角矩形的圖片,這個時候,我們就需要自定義ImageView了,其原理就是首先獲取到圖片的Bitmap,然後進行裁剪對應的圓角矩形的bitmap,然後在onDraw()進行繪製
Qt之自定義控制元件(開關按鈕)
簡述 接觸過iOS系統的童鞋們應該對開關按鈕很熟悉,在設定裡面經常遇到,切換時候的滑動效果比較帥氣。 通常說的開關按鈕,有兩個狀態:on、off。 下面,我們利用自定義控制元件來實現一個開關按鈕。 原理 重寫滑鼠按下事件(mousePres
android開發之自定義屬性、View和使用
“自定義”這三字聽起來就像是一個高階程式設計師所擁有的一樣!太不接地氣了!come on,baby,讓我們成為高階程式設計師吧!哈哈! 第一步:首先建立一個工程專案,在專案中的res/values/下建立atts.xml檔案,在該檔案中: <?xml version
Android開發之自定義屬性的使用
自定義屬性一般會在我們自定義一個view的時候會用到,這個其實在系統應用中相當的常見,比如我目前維護的系統launcher應用,裡面就是相當多的自定義view會用到這個自定義屬性設定,那麼現將其總結總結。有些東西不去總結下來,時間久了真的會忘記。 步驟一:
Android開發之最新Recyclerview控制元件的使用詳解(一)
本篇博文主要給大家分享關於RecyclerView控制元件的使用及通過繼承RecyclerView來實現滑動時載入圖片的優化方案,也同樣能解決防止圖片亂序的問題,之前有在網上有看到大神對Android中ListView非同步載入圖片亂序問題進行過分析,並深入剖析原理
WPF/Blend4之自定義控制元件——製作自己的Button
先展示一下效果圖 先用Ellipse控制元件畫一個30*30的橢圓,找到畫筆屬性Fill,選擇下面的漸變畫筆,左下角選擇徑向漸變,起始顏色設成#FFFF0000,結束顏色設成#FFFFC8C8 右鍵點Ellipse選擇構成控制元件 選擇Button,確定,進入Butt
【我的Android進階之旅】自定義控制元件之使用ViewPager實現可以預覽的畫廊效果,並且自定義畫面切換的動畫效果的切換時間
我們來看下效果 在這裡,我們實現的是,一個ViewPager來顯示圖片列表。這裡一個頁面,ViewPage展示了前後的預覽,我們讓預覽頁進行Y軸的壓縮,並設定透明度為0.5f,所有我們看到gif最後,左右兩邊的圖片有點朦朧感。讓預覽頁和主頁面有主從感。我們用分