From 359fe60678c8ad181ffd6b5fe35a147a40deab1a Mon Sep 17 00:00:00 2001 From: linglongxin24 Date: Tue, 24 May 2016 15:36:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E9=A1=B6=E9=83=A8?= =?UTF-8?q?=E5=BE=AA=E7=8E=AF=E5=B9=BF=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/kejiang/yuandl/view/MyGallery.java | 161 ++++++++++++++++++ .../src/main/res/drawable/indicator_focus.png | Bin 0 -> 15285 bytes .../main/res/drawable/indicator_normal.png | Bin 0 -> 15288 bytes 3 files changed, 161 insertions(+) create mode 100644 libray_lxndroid/src/main/java/com/kejiang/yuandl/view/MyGallery.java create mode 100644 libray_lxndroid/src/main/res/drawable/indicator_focus.png create mode 100644 libray_lxndroid/src/main/res/drawable/indicator_normal.png diff --git a/libray_lxndroid/src/main/java/com/kejiang/yuandl/view/MyGallery.java b/libray_lxndroid/src/main/java/com/kejiang/yuandl/view/MyGallery.java new file mode 100644 index 0000000..267f055 --- /dev/null +++ b/libray_lxndroid/src/main/java/com/kejiang/yuandl/view/MyGallery.java @@ -0,0 +1,161 @@ +package com.kejiang.yuandl.view; + +import android.content.Context; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemSelectedListener; +import android.widget.Gallery; +import android.widget.ImageView; +import android.widget.LinearLayout; + + +import com.kejiang.yuandl.R; + +import java.util.Timer; +import java.util.TimerTask; + +public class MyGallery extends Gallery implements OnItemSelectedListener { + /** + * 存储上一个选择项的Index + */ + private int preSelImgIndex = 0; + + + /** + * 这里的数值,限制了每次滚动的最大长度,图片宽度为480PX。这里设置600效果好一些。 这个值越大,滚动的长度就越大。 + * 也就是会出现一次滚动跨多个Image。这里限制长度后,每次滚动只能跨一个Image + */ + private static final int timerAnimation = 1; + private final Handler mHandler = new Handler() { + public void handleMessage(android.os.Message msg) { + switch (msg.what) { + case timerAnimation: + int position = getSelectedItemPosition(); + if (position >= (getCount() - 1)) { + onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null); + } else { + onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null); + } + break; + + default: + break; + } + } + + }; + + private final Timer timer = new Timer(); + private final TimerTask task = new TimerTask() { + public void run() { + mHandler.sendEmptyMessage(timerAnimation); + } + }; + + public MyGallery(Context paramContext) { + super(paramContext); + timer.schedule(task, 3000, 3000); + } + + public MyGallery(Context paramContext, AttributeSet paramAttributeSet) { + super(paramContext, paramAttributeSet); + timer.schedule(task, 3000, 3000); + + } + + public MyGallery(Context paramContext, AttributeSet paramAttributeSet, + int paramInt) { + super(paramContext, paramAttributeSet, paramInt); + timer.schedule(task, 3000, 3000); + init(); + } + + private void init() { + } + + private boolean isScrollingLeft(MotionEvent paramMotionEvent1, + MotionEvent paramMotionEvent2) { + float f2 = paramMotionEvent2.getX(); + float f1 = paramMotionEvent1.getX(); + return f2 > f1; + } + + public boolean onFling(MotionEvent paramMotionEvent1, + MotionEvent paramMotionEvent2, float paramFloat1, float paramFloat2) { + int keyCode; + if (isScrollingLeft(paramMotionEvent1, paramMotionEvent2)) { + keyCode = KeyEvent.KEYCODE_DPAD_LEFT; + } else { + keyCode = KeyEvent.KEYCODE_DPAD_RIGHT; + } + onKeyDown(keyCode, null); + return true; + } + + private int count = 0; + private LinearLayout ll_focus_indicator_container; + public void init(int count, LinearLayout ll_focus_indicator_container) { + this.count = count; + this.ll_focus_indicator_container = ll_focus_indicator_container; + InitFocusIndicatorContainer(); + this.setOnItemSelectedListener(this); + } + + private void InitFocusIndicatorContainer() { + ll_focus_indicator_container.removeAllViews(); + if(count<=1){ + return; + } + for (int i = 0; i < count; i++) { + ImageView localImageView = new ImageView(getContext()); + localImageView.setId(i); + ImageView.ScaleType localScaleType = ImageView.ScaleType.FIT_XY; + localImageView.setScaleType(localScaleType); + LinearLayout.LayoutParams localLayoutParams = new LinearLayout.LayoutParams( + 24, 24); + localImageView.setLayoutParams(localLayoutParams); + localImageView.setPadding(5, 5, 5, 5); + localImageView.setImageResource(R.drawable.indicator_normal); + ll_focus_indicator_container.addView(localImageView); + } + } + + + public void destroy() { + timer.cancel(); + } + + @Override + public void onItemSelected(AdapterView adapterView, View view, int selIndex, long l) { + //修改上一次选中项的背景 + if(count==0){ + return; + } + selIndex = selIndex %count; + + ImageView preSelImg = (ImageView) ll_focus_indicator_container + .findViewById(preSelImgIndex); + if(preSelImg==null){ + return; + } + preSelImg.setImageDrawable(getContext() + .getResources().getDrawable(R.drawable.indicator_normal)); + //修改当前选中项的背景 + ImageView curSelImg = (ImageView) ll_focus_indicator_container + .findViewById(selIndex); + curSelImg + .setImageDrawable(getContext() + .getResources().getDrawable( + R.drawable.indicator_focus)); + preSelImgIndex = selIndex; + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } +} \ No newline at end of file diff --git a/libray_lxndroid/src/main/res/drawable/indicator_focus.png b/libray_lxndroid/src/main/res/drawable/indicator_focus.png new file mode 100644 index 0000000000000000000000000000000000000000..0f57150642b1886207c8bbd0240959ad5347d516 GIT binary patch literal 15285 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 LO@YmGI#>S-+C#|g literal 0 HcmV?d00001