編輯:關於Android編程
很多App都有這種效果,特別一些電商類的App,頂部每隔幾秒鐘會向右翻頁顯示下張圖片,用來作推廣或者內容展示用的。今天來簡單地模仿一下,還自帶一個自動跳動的小功能(底部有幾個小點,圖片移動的時候,點的狀態也在變化),用定時器來實現不難。
import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.SystemClock; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.TextView; public class MainActivity extends Activity implements OnPageChangeListener { protected static final String TAG = "MainActivity"; private List<ImageView> imageViewList; private ViewPager mViewPager; private final int[] imageResIDs = { R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e }; private final String[] imageDescriptions = { "鞏俐不低俗,我就不能低俗", "撲樹又回來啦!再唱經典老歌引萬人大合唱", "揭秘北京電影如何升級", "樂視網TV版大派送", "熱血屌絲的反殺" }; private TextView tvImageDescription; // 圖片描述 private LinearLayout llPointGroup; // 點控件的組 private int previousPosition = 0; // viewpager選中的前一個position private boolean isStop = false; // 控制循環的子線程是否停止 private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); new Thread(new Runnable() { @Override public void run() { // 每兩秒鐘向主線程發送一條消息, 切換viewpager的界面 while(!isStop) { SystemClock.sleep(2000); handler.sendEmptyMessage(0); } Log.i(TAG, "循環線程停止了"); }}).start(); } @Override protected void onDestroy() { isStop = true; super.onDestroy(); } private void initView() { mViewPager = (ViewPager) findViewById(R.id.viewpager); llPointGroup = (LinearLayout) findViewById(R.id.ll_point_group); tvImageDescription = (TextView) findViewById(R.id.tv_image_description); imageViewList = new ArrayList<ImageView>(); ImageView iv; View pointView; LayoutParams params; for (int i = 0; i < imageResIDs.length; i++) { iv = new ImageView(this); iv.setBackgroundResource(imageResIDs[i]); imageViewList.add(iv); // 根據圖片添加點 pointView = new View(this); params = new LayoutParams(5, 5); params.leftMargin = 5; pointView.setLayoutParams(params); pointView.setEnabled(false); pointView.setBackgroundResource(R.drawable.point_bg); llPointGroup.addView(pointView); } MyPagerAdapter mAdapter = new MyPagerAdapter(); mViewPager.setAdapter(mAdapter); mViewPager.setOnPageChangeListener(this); int item = (Integer.MAX_VALUE / 2) - ((Integer.MAX_VALUE / 2) % imageViewList.size()); mViewPager.setCurrentItem(item); // 設置當前選中的item的position tvImageDescription.setText(imageDescriptions[previousPosition]); llPointGroup.getChildAt(previousPosition).setEnabled(true); // 第一點被選中 } class MyPagerAdapter extends PagerAdapter { @Override public int getCount() { return Integer.MAX_VALUE; } /** * 移動的對象和進來的對象如果是同一個就返回true, 代表復用view對象 * false 使用object對象 */ @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } /** * 需要銷毀的對象的position傳進來 */ @Override public void destroyItem(ViewGroup container, int position, Object object) { // 移除掉指定position的對象 mViewPager.removeView(imageViewList.get(position % imageViewList.size())); } /** * 加載position位置的view對象 */ @Override public Object instantiateItem(ViewGroup container, int position) { // 添加指定position的對象 mViewPager.addView(imageViewList.get(position % imageViewList.size())); return imageViewList.get(position % imageViewList.size()); } } @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 } /** * 當viewpager頁面切換時回調 * @param position 就是當前顯示的page頁 */ @Override public void onPageSelected(int position) { tvImageDescription.setText(imageDescriptions[position % imageViewList.size()]); llPointGroup.getChildAt(position % imageViewList.size()).setEnabled(true); llPointGroup.getChildAt(previousPosition).setEnabled(false); previousPosition = position % imageViewList.size(); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。
今天看了鴻洋_大神在慕課網講的qq5.0側滑菜單。學了不少的知識,同時也佩服鴻洋_大神思路的清晰。看了教程課下也自己實現了一下。代碼幾乎完全相同 別噴我啊。。沒辦法 o(
效果圖源碼KqwOpenCVFeaturesDemoCanny邊緣檢測器是一種被廣泛使用的算法,並被認為是邊緣檢測最優的算法,該方法使用了比高斯差分算法更復雜的技巧,如多
該篇為ListView下拉刷新和上拉加載實現的各種方法大合集。可能在具體的細節邏輯上處理不太到位,但基本上完成邏輯的實現。細節方面,個人可以根據自己的需求進行完善。該博客
在我們的手持設備中,一般都會自帶設備公司自己開發的文件管理系統、拍照系統之類的東東,今天我給大伙說說入門級開發的文件夾管理器,代碼贼少 總共就6個類吧,沒有