編輯:關於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();
}
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。
android:自定義HorizontalScrollView實現qq側滑菜單
今天看了鴻洋_大神在慕課網講的qq5.0側滑菜單。學了不少的知識,同時也佩服鴻洋_大神思路的清晰。看了教程課下也自己實現了一下。代碼幾乎完全相同 別噴我啊。。沒辦法 o(
OpenCV使用Canny邊緣檢測器實現圖像邊緣檢測
效果圖源碼KqwOpenCVFeaturesDemoCanny邊緣檢測器是一種被廣泛使用的算法,並被認為是邊緣檢測最優的算法,該方法使用了比高斯差分算法更復雜的技巧,如多
ListView上拉加載和下拉刷新多種實現方式
該篇為ListView下拉刷新和上拉加載實現的各種方法大合集。可能在具體的細節邏輯上處理不太到位,但基本上完成邏輯的實現。細節方面,個人可以根據自己的需求進行完善。該博客
Android 編程之入門開發文件夾管理器開發詳細講解-1
在我們的手持設備中,一般都會自帶設備公司自己開發的文件管理系統、拍照系統之類的東東,今天我給大伙說說入門級開發的文件夾管理器,代碼贼少 總共就6個類吧,沒有