知è˜(shÃ)
ä¸ç®¡æ˜¯ç¶²(wÇŽng)站,軟件還是å°ç¨‹åºï¼Œéƒ½è¦ç›´æŽ¥æˆ–間接能為您產(chÇŽn)生價(jià )值,我們?cè)è°§éžç¬ƒæ¹Ÿæ›ˆX表ç¾(xià n)çš„åŒæ™‚(shÃ),更å´(cè)é‡äºŽåŠŸèƒ½çš„ä¾¿æ·ï¼Œç‡Ÿ(yÃng)銷的便利,é‹(yùn)營(yÃng)的高效,讓網(wÇŽng)ç«™æˆç‚ºç‡Ÿ(yÃng)銷工具,讓軟件能切實(shÃ)æå‡ä¼æ¥(yè)å…§(nèi)éƒ¨ç®¡ç†æ°´å¹³å’Œæ•ˆçŽ‡ã€‚å„ª(yÅu)秀的程åº?yà n)楹笃è°î¥?jÃ)æä¾›ä¾¿æ·çš„æ”¯æŒï¼
您當(dÄng)å‰ä½ç½®>首é (yè) » æ–°èžè³‡è¨Š » 技術(shù)分享 >
自定義橫å‘çš„ScrollView
發(fÄ)表時(shÃ)間:2021-1-10
發(fÄ)布人:葵宇科技
ç€è¦½æ¬¡æ•¸(shù):48
介紹一個(gè)自定義橫å‘çš„ScrollView,å¯ä»¥ç›£(jiÄn)è½æ»‘å‹•(dòng)的狀態(tà i),å¯ä»¥ç›£(jiÄn)è½æ»‘å‹•(dòng)到了最左å´(cè),æ£åœ¨ä¸é–“滑動(dòng)和滑到了最å³é‚Šã€‚
æ€è·¯:
1.æ ¹æ“š(jù)ScrollViewä¸ç¬¬ä¸€å±¤çš„åView,其實(shÃ)第一層也就一個(gè)View,這是ScrollViewè¦(guÄ«)定的,ScrollView包å«çš„å…§(nèi)å®¹ï¼Œå¿…é ˆå…¨éƒ¨æ”¾åˆ°ä¸€å€‹(gè)åViewä¸ã€‚
2.æ ¹æ“š(jù)最第一個(gè)åView的左å´(cè)忍™(biÄo),å³å´(cè)忍™(biÄo),ScrollViewçš„å¯¬åº¦å’Œæ©«å‘æ»‘å‹•(dòng)çš„è·é›¢ï¼Œä¾†åˆ¤æ–·æ»‘å‹•(dòng)çš„ä½ç½®ã€‚
3.定義滑動(dòng)ä½ç½®çš„監(jiÄn)è½æŽ¥å£ã€‚
public class MyScrollView extends HorizontalScrollView { public MyScrollView(Context context) { super(context); } public MyScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public MyScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { View view = (View) getChildAt(getChildCount() - 1); // 如果為0ï¼Œè‰æ˜Žæ»‘å‹•(dòng)到最左邊 if (view.getLeft() - getScrollX() == 0) { onScrollListener.onLeft(); // 如果為0è‰æ˜Žæ»‘å‹•(dòng)到最å³é‚Š } else if ((view.getRight() - (getWidth() + getScrollX())) == 0) { onScrollListener.onRight(); // 說明在ä¸é–“ } else { onScrollListener.onScroll(); } super.onScrollChanged(l, t, oldl, oldt); } /** * å®šç¾©æŽ¥å£ * * @author admin */ public interface OnScrollListener1 { void onRight(); void onLeft(); void onScroll(); } private OnScrollListener1 onScrollListener; public void setOnScrollListener(OnScrollListener1 onScrollListener) { this.onScrollListener = onScrollListener; } }首先ç²å–ScrollView的第一個(gè)å©å,ç²å–到左å´(cè)çš„åæ¨™(biÄo)view.getLeft(),ç²å–ScrollView在Xæ–¹å‘æ»‘å‹•(dòng)çš„è·é›¢:getScrollX(),就是ScrollView和左å´(cè)邊緣的è·é›¢ã€‚ç²å–第一個(gè)å©å最å³å´(cè)Xçš„åæ¨™(biÄo):view.getRight().ScrllView的寬度:getWidth()
view.getLeft()å’Œview.getLeft()çš„值是ä¸è®Šçš„。
view.getLeft():ScrollView的寬度,其實(shÃ)也是å±å¹•的寬度。
[img]http://img.blog.csdn.net/20150108111043953?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9yd2FyZHl6aw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
使用æ¥é©Ÿ:
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#fef4dc" android:gravity="center" android:orientation="horizontal" > <com.example.view.MyScrollView android:id="@+id/myView" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="none" > <LinearLayout android:id="@+id/sortliner" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal" android:paddingLeft="10dp" android:paddingRight="10dp" > </LinearLayout> </com.example.view.MyScrollView> </LinearLayout> </LinearLayout>
MainActivity.java
public class MainActivity extends Activity { private final String TAG = MainActivity.class.getSimpleName(); final String[] arr = { "骨科", "婦科", "普外科", "神經(jÄ«ng)å…§(nèi)ç§‘", "神經(jÄ«ng)ç§‘", "神經(jÄ«ng)外科", "普外", "普內(nèi)", "呼å¸ç§‘", "消化科", "å…’ç§‘", "心內(nèi)" }; private MyScrollView myView;// 自定義的滑動(dòng)view private LinearLayout sortliner;// 滑動(dòng)æ¢ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); Toast.makeText(getApplicationContext(), ""+screenWidth, 0).show(); } public void initView() { myView = (MyScrollView) findViewById(R.id.myView); sortliner = (LinearLayout) findViewById(R.id.sortliner); sortliner.removeAllViews(); myView.setOnScrollListener(new OnScrollListener1() { @Override public void onScroll() { Log.d(TAG, "在ä¸é–“滑動(dòng)"); } @Override public void onRight() { Log.d(TAG, "滑動(dòng)到了最å³é‚Š"); Toast.makeText(getApplicationContext(), "滑到了最å³é‚Š", 0).show(); } @Override public void onLeft() { Log.d(TAG, "滑動(dòng)到了最左邊"); Toast.makeText(getApplicationContext(), "滑到了最左邊", 0).show(); } }); initScrollChildView(); } /** * 準(zhÇ”n)å‚™å‘Scroller䏿·»åŠ View * * @param params */ private void initScrollChildView() { LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); for (int i = 0; i < arr.length; i++) {// 往二級(jÃ)分類ä¸åŠ è¼‰æ•¸(shù)據(jù) Button sort = new Button(MainActivity.this); sort.setText(arr[i]); sort.setTextSize(15); sort.setMinHeight(30); sort.setPadding(20, 5, 20, 5); // 把TextViewæ·»åŠ åˆ°æ»‘å‹•(dòng)æ¢å…§(nèi) sortliner.addView(sort, i, params); } } }
æºç¢¼ä¸‹è¼‰åœ°å€:http://download.csdn.net/detail/forwardyzk/8339959
效果圖:
[img]http://img.blog.csdn.net/20150108113330250?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9yd2FyZHl6aw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
相關(guÄn)案例查看更多
相關(guÄn)閱讀
- 云å—百度å°ç¨‹åº
- ç¶²(wÇŽng)ç«™ç¶è·(hù)
- 百度å°ç¨‹åºé–‹ç™¼(fÄ)
- ç¶²(wÇŽng)站建è¨(shè)高手
- 云å—å°ç¨‹åºä»£å»º
- ç¶²(wÇŽng)站開發(fÄ)
- 云å—軟件è¨(shè)計(jì)
- 模版信æ¯
- ç¶²(wÇŽng)站建è¨(shè)é¸
- ç¶²(wÇŽng)站建è¨(shè)å…¬å¸å“ªå®¶å¥½
- å°ç¨‹åºåˆ¶ä½œ
- 云å—å°ç¨‹åºè¨(shè)計(jì)
- ç¶²(wÇŽng)站優(yÅu)化
- äº‘å—æ—…游網(wÇŽng)站建è¨(shè)
- 云å—ç¶²(wÇŽng)站建è¨(shè)é èœå…¬å¸
- 政府網(wÇŽng)站建è¨(shè)æœå‹™(wù)
- 云å—ç¶²(wÇŽng)絡(luò)營(yÃng)銷
- 開發(fÄ)框架
- 云å—ç¶²(wÇŽng)站建è¨(shè)專家
- 云å—ç¶²(wÇŽng)站優(yÅu)化公å¸
- 云å—å°ç¨‹åºé–‹ç™¼(fÄ)
- ç¶²(wÇŽng)站建è¨(shè)æœå‹™(wù)
- 手機(jÄ«)ç¶²(wÇŽng)站建è¨(shè)
- å°ç¨‹åºè¨(shè)計(jì)
- 云å—ç¶²(wÇŽng)絡(luò)推廣
- 旅游網(wÇŽng)站建è¨(shè)
- 云å—ç¶²(wÇŽng)é (yè)制作
- 云å—ç¶²(wÇŽng)站建è¨(shè)一æ¢é¾
- 云å—çœåŸŽé„‰(xiÄng)建è¨(shè)廳網(wÇŽng)ç«™
- å°ç¨‹åºå•†åŸŽ