Integrate MediaView into MediaAdapter
This commit is contained in:
parent
9b7254cd5c
commit
cb013cc51e
@ -26,6 +26,13 @@ import java.util.regex.Pattern;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.graphics.Canvas;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.graphics.Paint;
|
||||||
|
import android.util.TypedValue;
|
||||||
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
@ -76,7 +83,7 @@ public class MediaAdapter extends BaseAdapter implements Filterable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (view == null)
|
if (view == null)
|
||||||
view = new MediaView(mContext, mPrimaryField, mSecondaryField, mExpanderListener != null);
|
view = new MediaView(mContext);
|
||||||
|
|
||||||
view.updateMedia(get(position));
|
view.updateMedia(get(position));
|
||||||
|
|
||||||
@ -257,4 +264,104 @@ public class MediaAdapter extends BaseAdapter implements Filterable {
|
|||||||
intent.putExtra("title", song.getField(mPrimaryField));
|
intent.putExtra("title", song.getField(mPrimaryField));
|
||||||
return intent;
|
return intent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static float mTextSize = -1;
|
||||||
|
private static Bitmap mExpander = null;
|
||||||
|
|
||||||
|
private int mViewHeight = -1;
|
||||||
|
|
||||||
|
public class MediaView extends View {
|
||||||
|
private SongData mData;
|
||||||
|
private boolean mExpanderPressed;
|
||||||
|
|
||||||
|
public MediaView(Context context)
|
||||||
|
{
|
||||||
|
super(context);
|
||||||
|
|
||||||
|
if (mExpander == null)
|
||||||
|
mExpander = BitmapFactory.decodeResource(context.getResources(), R.drawable.expander_arrow);
|
||||||
|
if (mTextSize == -1)
|
||||||
|
mTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 14, context.getResources().getDisplayMetrics());
|
||||||
|
if (mViewHeight == -1)
|
||||||
|
mViewHeight = measureHeight();
|
||||||
|
}
|
||||||
|
|
||||||
|
private int measureHeight()
|
||||||
|
{
|
||||||
|
int expanderHeight;
|
||||||
|
int textHeight;
|
||||||
|
|
||||||
|
if (mExpanderListener != null)
|
||||||
|
expanderHeight = mExpander.getHeight() + (int)mTextSize;
|
||||||
|
else
|
||||||
|
expanderHeight = 0;
|
||||||
|
|
||||||
|
if (mSecondaryField != -1)
|
||||||
|
textHeight = (int)(7 * mTextSize / 2);
|
||||||
|
else
|
||||||
|
textHeight = (int)(2 * mTextSize);
|
||||||
|
|
||||||
|
return Math.max(expanderHeight, textHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
|
||||||
|
{
|
||||||
|
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), mViewHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDraw(Canvas canvas)
|
||||||
|
{
|
||||||
|
if (mData == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int width = getWidth();
|
||||||
|
int height = getHeight();
|
||||||
|
float padding = mTextSize / 2;
|
||||||
|
|
||||||
|
Paint paint = new Paint();
|
||||||
|
paint.setTextSize(mTextSize);
|
||||||
|
paint.setAntiAlias(true);
|
||||||
|
|
||||||
|
if (mExpanderListener != null) {
|
||||||
|
width -= padding * 3 + mExpander.getWidth();
|
||||||
|
canvas.drawBitmap(mExpander, width + padding * 2, (height - mExpander.getHeight()) / 2, paint);
|
||||||
|
}
|
||||||
|
|
||||||
|
canvas.clipRect(padding, 0, width - padding, height);
|
||||||
|
|
||||||
|
float allocatedHeight;
|
||||||
|
|
||||||
|
if (mSecondaryField != -1) {
|
||||||
|
allocatedHeight = height / 2 - padding * 3 / 2;
|
||||||
|
|
||||||
|
paint.setColor(Color.GRAY);
|
||||||
|
canvas.drawText(mData.getField(mSecondaryField), padding, height / 2 + padding / 2 + (allocatedHeight - mTextSize) / 2 - paint.ascent(), paint);
|
||||||
|
} else {
|
||||||
|
allocatedHeight = height - padding * 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
paint.setColor(Color.WHITE);
|
||||||
|
canvas.drawText(mData.getField(mPrimaryField), padding, padding + (allocatedHeight - mTextSize) / 2 - paint.ascent(), paint);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateMedia(SongData data)
|
||||||
|
{
|
||||||
|
mData = data;
|
||||||
|
invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
public SongData getExpanderData()
|
||||||
|
{
|
||||||
|
return mExpanderPressed ? mData : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onTouchEvent(MotionEvent event)
|
||||||
|
{
|
||||||
|
mExpanderPressed = mExpanderListener != null && event.getX() > getWidth() - mExpander.getWidth() - 3 * mTextSize / 2;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,132 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2010 Christopher Eby <kreed@kreed.org>
|
|
||||||
*
|
|
||||||
* This file is part of Vanilla Music Player.
|
|
||||||
*
|
|
||||||
* Vanilla Music Player is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Library General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or (at your
|
|
||||||
* option) any later version.
|
|
||||||
*
|
|
||||||
* Vanilla Music Player is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
||||||
* or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.kreed.vanilla;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.Bitmap;
|
|
||||||
import android.graphics.BitmapFactory;
|
|
||||||
import android.graphics.Canvas;
|
|
||||||
import android.graphics.Color;
|
|
||||||
import android.graphics.Paint;
|
|
||||||
import android.util.DisplayMetrics;
|
|
||||||
import android.util.TypedValue;
|
|
||||||
import android.view.MotionEvent;
|
|
||||||
import android.view.View;
|
|
||||||
|
|
||||||
public class MediaView extends View {
|
|
||||||
private static float mTextSize = -1;
|
|
||||||
private static Bitmap mExpander = null;
|
|
||||||
|
|
||||||
private SongData mData;
|
|
||||||
private int mPrimaryField;
|
|
||||||
private int mSecondaryField;
|
|
||||||
private boolean mHasExpander;
|
|
||||||
|
|
||||||
private boolean mExpanderPressed;
|
|
||||||
|
|
||||||
public MediaView(Context context, int primaryField, int secondaryField, boolean hasExpander)
|
|
||||||
{
|
|
||||||
super(context);
|
|
||||||
|
|
||||||
if (mExpander == null)
|
|
||||||
mExpander = BitmapFactory.decodeResource(context.getResources(), R.drawable.expander_arrow);
|
|
||||||
if (mTextSize == -1) {
|
|
||||||
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
|
|
||||||
mTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 14, metrics);
|
|
||||||
}
|
|
||||||
|
|
||||||
mPrimaryField = primaryField;
|
|
||||||
mSecondaryField = secondaryField;
|
|
||||||
mHasExpander = hasExpander;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
|
|
||||||
{
|
|
||||||
int expanderHeight;
|
|
||||||
int textHeight;
|
|
||||||
|
|
||||||
if (mHasExpander)
|
|
||||||
expanderHeight = mExpander.getHeight() + (int)mTextSize;
|
|
||||||
else
|
|
||||||
expanderHeight = 0;
|
|
||||||
|
|
||||||
if (mSecondaryField != -1)
|
|
||||||
textHeight = (int)(7 * mTextSize / 2);
|
|
||||||
else
|
|
||||||
textHeight = (int)(2 * mTextSize);
|
|
||||||
|
|
||||||
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec),
|
|
||||||
Math.max(expanderHeight, textHeight));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDraw(Canvas canvas)
|
|
||||||
{
|
|
||||||
if (mData == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
int width = getWidth();
|
|
||||||
int height = getHeight();
|
|
||||||
float padding = mTextSize / 2;
|
|
||||||
|
|
||||||
Paint paint = new Paint();
|
|
||||||
paint.setTextSize(mTextSize);
|
|
||||||
paint.setAntiAlias(true);
|
|
||||||
|
|
||||||
if (mHasExpander) {
|
|
||||||
width -= padding * 3 + mExpander.getWidth();
|
|
||||||
canvas.drawBitmap(mExpander, width + padding * 2, (height - mExpander.getHeight()) / 2, paint);
|
|
||||||
}
|
|
||||||
|
|
||||||
canvas.clipRect(padding, 0, width - padding, height);
|
|
||||||
|
|
||||||
float allocatedHeight;
|
|
||||||
|
|
||||||
if (mSecondaryField != -1) {
|
|
||||||
allocatedHeight = height / 2 - padding * 3 / 2;
|
|
||||||
|
|
||||||
paint.setColor(Color.GRAY);
|
|
||||||
canvas.drawText(mData.getField(mSecondaryField), padding, height / 2 + padding / 2 + (allocatedHeight - mTextSize) / 2 - paint.ascent(), paint);
|
|
||||||
} else {
|
|
||||||
allocatedHeight = height - padding * 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
paint.setColor(Color.WHITE);
|
|
||||||
canvas.drawText(mData.getField(mPrimaryField), padding, padding + (allocatedHeight - mTextSize) / 2 - paint.ascent(), paint);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateMedia(SongData data)
|
|
||||||
{
|
|
||||||
mData = data;
|
|
||||||
invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
public SongData getExpanderData()
|
|
||||||
{
|
|
||||||
return mExpanderPressed ? mData : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onTouchEvent(MotionEvent event)
|
|
||||||
{
|
|
||||||
mExpanderPressed = mHasExpander && event.getX() > getWidth() - mExpander.getWidth() - 3 * mTextSize / 2;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
@ -168,7 +168,7 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick
|
|||||||
public void onItemClick(AdapterView<?> list, View view, int pos, long id)
|
public void onItemClick(AdapterView<?> list, View view, int pos, long id)
|
||||||
{
|
{
|
||||||
MediaAdapter adapter = (MediaAdapter)list.getAdapter();
|
MediaAdapter adapter = (MediaAdapter)list.getAdapter();
|
||||||
SongData data = ((MediaView)view).getExpanderData();
|
SongData data = ((MediaAdapter.MediaView)view).getExpanderData();
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
int field = adapter.getPrimaryField();
|
int field = adapter.getPrimaryField();
|
||||||
SongData.Field limiter = new SongData.Field(field, data);
|
SongData.Field limiter = new SongData.Field(field, data);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user