自定義控制元件之歌詞RCL控制元件
最終效果圖:
控制元件的思路是2個TextView壓在一起
-------注意更改第二版為可以居中版本,下載Demo後請覆蓋內容
檔名:item_rcl.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/one"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_centerHorizontal="true">
<TextView
android:id="@+id/qqq"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="horizontal"
android:text="XINHAO_HAN"
android:textColor="#00ff00"
android:textSize="20sp" />
</LinearLayout>
<RelativeLayout
android:id="@+id/two"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/one">
<TextView
android:id="@+id/zzzz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="horizontal"
android:text="XINHAO_HAN"
android:textColor="#ff00ff"
android:textSize="20sp" />
</RelativeLayout>
</RelativeLayout>
TextView使用的屬性如下:
XML:
android:scrollbars="horizontal"
java:
textView.setMovementMethod(ScrollingMovementMethod
.getInstance());
textView.setHorizontallyScrolling(true); // 不讓超出螢幕的文字自動換行,使用滾動條
全部程式碼 --JAVA
package com.example.downlist.view;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.text.method.ScrollingMovementMethod;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.example.downlist.R;
import com.example.downlist.utils.UIUtlis;
/**
* Created by Administrator on 2017/9/20.
*/
//歌詞控制元件
public class RCLView extends FrameLayout {
private View one;
private View two;
private Context context;
private View view;
private int width;
private TextView textView;
private TextView qqq;
public RCLView(Context context) {
super(context);
initView(context, null);
}
private String title = "XINHAO_HAN";
private Paint paint;
public RCLView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initView(context, attrs);
}
public RCLView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context, attrs);
}
//初始化
public void setString(String string) {
textView.setText(string);
qqq.setText(string);
}
public void initView(Context context, AttributeSet attrs) {
this.context = context;
if (view == null)
view = UIUtlis.getView(R.layout.item_rcl);
if (one == null)
one = view.findViewById(R.id.one);
if (two == null)
two = view.findViewById(R.id.two);
textView = two.findViewById(R.id.zzzz);
qqq = one.findViewById(R.id.qqq);
textView.setMovementMethod(ScrollingMovementMethod
.getInstance());
textView.setHorizontallyScrolling(true); // 不讓超出螢幕的文字自動換行,使用滾動條
addView(view);
if (attrs != null) {
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RCLView);
int topColor = typedArray.getColor(R.styleable.RCLView_topColor, Color.RED);
int boomColor = typedArray.getColor(R.styleable.RCLView_boomColor, Color.BLUE);
String string = typedArray.getString(R.styleable.RCLView_text);
int integer = typedArray.getInteger(R.styleable.RCLView_textSize, 40);
setTopColor(topColor);
setBoomColor(boomColor);
setString(string);
setTextSize(integer);
}
}
//設定頂部顏色
public void setTopColor(int color) {
qqq.setTextColor(color);
}
//設定底部顏色
public void setBoomColor(int color) {
textView.setTextColor(color);
}
//設定字型大小
public void setTextSize(float size) {
qqq.setTextSize(size);
textView.setTextSize(size);
}
//開始測量
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
width = one.getMeasuredWidth();
// Log.e("寬:", "onMeasure: " + width );
}
public void setIndex(int index) {
ViewGroup.LayoutParams layoutParams = two.getLayoutParams();
double i = width * 1.0 / 100;
Log.e("寬:", "setIndex: " + i + " index: " + index + " 總和:" + (i * index));
layoutParams.width = (int) (i * index);
two.setLayoutParams(layoutParams);
}
//開始繪畫
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
}
//XML部分
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/one"
android:layout_width="wrap_content"
android:layout_height="25dp">
<TextView
android:id="@+id/qqq"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="horizontal"
android:text="這是自定義歌詞的一種思路"
android:textColor="#00ff00"
android:textSize="20sp" />
</LinearLayout>
<RelativeLayout
android:id="@+id/two"
android:layout_width="0dp"
android:layout_height="wrap_content">
<TextView
android:id="@+id/zzzz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="horizontal"
android:text="這是自定義歌詞的一種思路"
android:textColor="#ff00ff"
android:textSize="20sp" />
</RelativeLayout>
</FrameLayout>
attrs部分
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="RCLView">
<attr name="topColor" format="color" />
<attr name="boomColor" format="color" />
<attr name="textSize" format="integer"></attr>
<attr name="text" format="string"></attr>
</declare-styleable>
</resources>
//使用
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:hxh="http://schemas.android.com/apk/res-auto"
android:id="@+id/mySheView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.example.downlist.view.RCLView
android:id="@+id/rcView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
hxh:boomColor="#ff0000"
hxh:text="曾經的一切,都是那麼渺茫,曾經的曾經都是一切"
hxh:textSize="15"
hxh:topColor="#00ff00"></com.example.downlist.view.RCLView>
<SeekBar
android:id="@+id/see"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:max="100" />
</LinearLayout>
Demo下載:
連結: https://pan.baidu.com/s/1i5P6WML 密碼: 3283
相關文章
- Android自定義控制元件之自定義組合控制元件Android控制元件
- 自定義Switch控制元件控制元件
- 自定義控制元件ViewPager控制元件Viewpager
- 控制元件自定義位置控制元件
- 如何自定義控制元件控制元件
- iOS自定義控制元件:簡易下拉控制元件iOS控制元件
- Android自定義控制元件——自定義屬性Android控制元件
- Flutter 之 自定義控制元件Flutter控制元件
- iOS自定義控制元件 AlertViewiOS控制元件View
- iOS自定義控制元件 SegmentiOS控制元件
- WPF Blend 自定義控制元件控制元件
- 自定義彈幕控制元件控制元件
- 自定義分頁控制元件控制元件
- winform 自定義容器控制元件ORM控制元件
- C#自定義控制元件:如果定義控制元件的事件C#控制元件事件
- QT常用控制元件(三)——自定義控制元件封裝QT控制元件封裝
- 基於 RecyclerView 實現的歌詞滾動自定義控制元件View控制元件
- 4. 自定義控制元件(4) --- 自定義屬性控制元件
- Android自定義控制元件之自定義屬性Android控制元件
- WPF 自定義控制元件的坑(蠢的:自定義控制元件內容不顯示)控制元件
- Flutter 自定義縮放控制元件Flutter控制元件
- iOS自定義控制元件 SlideriOS控制元件IDE
- Qt實現自定義控制元件QT控制元件
- android:建立自定義控制元件Android控制元件
- 自定義UIView UITableViewCell等控制元件UIView控制元件
- 自定義下拉選單控制元件控制元件
- 自定義的ValidationSummary控制元件控制元件
- 自定義控制元件實踐-倒數計時控制元件控制元件
- Android 控制元件架構與自定義控制元件詳解Android控制元件架構
- UWP 自定義密碼框控制元件密碼控制元件
- AngularJS自定義表單控制元件AngularJS控制元件
- 【Android】自定義樹形控制元件Android控制元件
- 自定義控制元件總結和思考控制元件
- 自定義控制元件 --- 電池icon控制元件
- 自定義頭像圓角控制元件控制元件
- 自定義圖片輪播控制元件控制元件
- jqGrid 編輯自定義控制元件控制元件
- 自定義DropDownList控制元件的實現控制元件